我正在尝试学习Java的基础知识,我对JavaScript更熟悉.
以下陈述是否准确(我只需要高级别的理解):
Javascript构造函数或工厂函数与Java中的类或接口等效(我在这里松散地使用这个词).
编辑:
这就是我在Java书中读到的内容:
Java程序主要是通过调用彼此的方法与其他对象通信的集合对象.每个对象都是某种类型,该类型由类或 接口定义.大多数Java程序使用许多不同类型的集合.
来自Javascript,上面听起来非常像JS构造函数类似于Java中的类,其中将定义对象属性和方法.
我知道Java和JavaScript是两种不同的语言.
谢谢
我会说你很亲密.JavaScript中的构造函数(和原型)是我们在JS中最接近 Java类的东西 ; 但他们肯定不是"等同的".
您可以动态地向JavaScript构造函数的原型添加或删除属性和方法; 您无法在运行时从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
Run Code Online (Sandbox Code Playgroud)
只需将构造函数的原型分配给任意对象,就可以在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'
Run Code Online (Sandbox Code Playgroud)
在JavaScript中,原型只是一个对象.所以"类"(构造函数)可以从任何普通对象"继承"; 因此,"类型"和"价值"之间存在着更为宽松的区别.
例:
function Thing() {}
var randomObject = { foo: 1, bar: 2 };
Thing.prototype = randomObject;
var thing = new Thing();
thing.foo; // 1
Run Code Online (Sandbox Code Playgroud)
在Java中,您可以定义某个类必须实现的接口.JavaScript并没有真正提供任何此类机制.
这些只是我头脑中的一些差异.重点是:它们是相似的,你绘制连接是正确的.但他们绝对不一样.