假设我们正在定义一个Person构造函数并创建一个像这样的新人:
function Person(name){
this.name = name;
}
var person = new Person("John Doe");
以下两个实现输出:来自John Doe的 Hello :
第一次实施
person.sayHello = function(){console.log("Hello from " + this.name);}
正在运行代码1
function Person(name){this.name = name;}
var person = new Person("John Doe");
person.sayHello = function(){console.log("Hello from " + this.name);}
person.sayHello();
第二次实施
Person.prototype.sayHello = function(){console.log("Hello from " + this.name);}
正在运行代码2
function Person(name){this.name = name;}
var person = new Person("John Doe");
Person.prototype.sayHello = function(){console.log("Hello from " + this.name);}
person.sayHello();
我的问题是:
答案 0 :(得分:1)
简单来说,使用对象的prototype
用于在创建对象属性后扩展它们。最好的用例之一是,当类不是由您编写,或从某个地方导入时,您需要扩展它。
2个实现是否相似(我不是在讨论结果而是副作用)?
AFAIK,它是一样的。
如果不是,有什么不同,我们应该选择第一个还是第二个?
是的,但是何时使用,请参见上文。