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