gpt4 book ai didi

java - Javascript 构造函数与 Java 中的类或接口(interface)等效/相似吗

转载 作者:行者123 更新时间:2023-12-02 05:29:35 27 4
gpt4 key购买 nike

我正在尝试学习 Java 基础知识,并且我更熟悉 JavaScript。

以下陈述准确吗(我只需要高层次的理解):

Javascript 构造函数或工厂函数与 Java 中的类或接口(interface)等价(我在这里宽松地使用这个词)。

编辑:

这是我在一本 Java 书中读到的内容:

A Java program is mostly a collection objects talking to other objects by invoking each other's methods. Every object is of a certain type, and that type is defined by a class or an interface. Most Java programs use a collection of many different types.

上面的内容来自 Javascript,听起来很像 JS 构造函数,类似于 Java 中的类,其中定义了对象属性和方法。

我知道 Java 和 JavaScript 是两种不同的语言。

谢谢

最佳答案

我想说你已经很接近了。 JavaScript 中的构造函数(和原型(prototype))是 JS 中与 Java 类最接近的东西;但它们肯定不是“等价的”。

您可以动态地向 JavaScript 构造函数的原型(prototype)添加或删除属性和方法;您无法在运行时向 Java 类添加或删除内容。

示例:

function Foo() {}
Foo.prototype.hello = function() { alert('hello'); };

var f = new Foo();
f.hello(); // alerts 'hello'

delete Foo.prototype.hello;

f.hello(); // throws an error

只需将构造函数的原型(prototype)分配给任意对象,即可在 JavaScript 中实现运行时的“继承”。在 Java 中,您在编译时声明继承,并且不能在运行时更改它。

示例:

function EnglishSpeaker() {}
EnglishSpeaker.prototype.greet = function() { return 'hello'; };

function SpanishSpeaker() {}
SpanishSpeaker.prototype.greet = function() { return 'hola'; };

function Me() {}
Me.prototype = EnglishSpeaker.prototype;

var me = new Me();
me instanceof EnglishSpeaker; // true
me.greet(); // 'hello'

Me.prototype = SpanishSpeaker.prototype;
me = new Me();
me instanceof EnglishSpeaker; // false
me instanceof SpanishSpeaker; // true
me.greet(); // 'hola'

在 JavaScript 中,原型(prototype)只是一个对象。因此“类”(构造函数)可以“继承”任何普通对象;因此,“类型”和“值”之间的区别要宽松得多。

示例:

function Thing() {}

var randomObject = { foo: 1, bar: 2 };
Thing.prototype = randomObject;

var thing = new Thing();
thing.foo; // 1

在 Java 中,您可以定义某个类必须实现的接口(interface)。 JavaScript 并没有真正提供任何这样的机制。

这些只是我想到的一些差异。要点是:它们很相似,你建立联系是正确的。但它们绝对不一样。

关于java - Javascript 构造函数与 Java 中的类或接口(interface)等效/相似吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21026704/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com