以下方法有何不同之处。哪种方式最好?
var obj;
obj = function () {
}
obj.prototype = {
getName: function () {
console.log("my name");
}
}
和这个
var obj;
obj = function () {
}
obj.getName.prototype = {
console.log("my name");
}
两者都一样吗?
答案 0 :(得分:1)
第一个。
您正在使用新的原始对象覆盖完整的原型对象。因此,现有方法和属性将因此分配而被删除。
第二个
您正在分配新方法,而不是删除现有方法和属性。
编辑:
第二个应该是这样的
obj.prototype.getName = function(){
}
答案 1 :(得分:1)
它们不一样,有效的方法是第一种方式。
或许你想问的是这些之间的区别:
function() Obj {}
Obj.prototype.getName = function() {
console.log("my name");
};
var obj = new Obj;
vs this
function() Obj {
this.getName = function() {
console.log("my name");
};
}
var obj = new Obj;
答案是两个都是有效的,第一个添加功能到原型链,第二个添加到功能的实例。
让我们从第二个开始,更简单。运行代码obj
后,函数名称getName将附加到自身。 obj.getName()
会在obj
上调用该方法。
然而在第一个调用obj.getName()
时,js编译器会查看obj
方法getName
并且在那里找不到它,所以它会尝试查找它链。 js中的所有对象都具有__proto__
属性。另一个对象是什么。当您使用new
关键字创建对象时,生成的对象__proto__
将设置为fucntion的原型。
委托这样的函数的好处是,假设您使用此函数生成30个对象,那么也不会有30个getName方法。相反,所有对象仍将引用具有getName
方法的原型对象。所以将有30个参考。
答案 2 :(得分:0)
不,他们不一样。
您发布的代码不是有效的JavaScript。并引发一个SyntaxError。 我只能假设你问以下哪一个是更好的"将属性赋予Object Prototype的方法:
var foo = {}
foo.prototype = {
getName: function(){}
}
VS
var foo = {}
foo.prototype = {}
foo.prototype.getName = function(){}
第一种方法更好,因为您没有为原型重新分配新对象 - 它会删除可能存在的所有属性。 所以第一个被认为是更好的。