Javascript对象方法原型
以下几点的区别是什么。哪种方式最好Javascript对象方法原型,javascript,object,javascript-objects,Javascript,Object,Javascript Objects,以下几点的区别是什么。哪种方式最好 var obj; obj = function () { } obj.prototype = { getName: function () { console.log("my name"); } } 还有这个 var obj; obj = function () { } obj.getName.prototype
var obj;
obj = function () {
}
obj.prototype = {
getName: function () {
console.log("my name");
}
}
还有这个
var obj;
obj = function () {
}
obj.getName.prototype = {
console.log("my name");
}
两者都一样吗?不,它们不一样 您发布的代码不是有效的JavaScript。并引发了一个语法错误。 我只能假设您会问,以下哪一项是将属性分配给对象原型的“更好”方法:
var foo = {}
foo.prototype = {
getName: function(){}
}
vs:
第一种方法更好,因为您没有将新对象重新分配给原型-它将删除可能存在的所有属性。
所以第一个被认为更好。第一个
您正在用新的原型对象覆盖完整的原型对象。因此,由于此赋值,现有的方法和属性将被删除
还有第二个
您正在指定新方法,而不是删除现有方法和属性
编辑:
第二个应该是这样的
obj.prototype.getName = function(){
}
它们是不同的,有效的方法是第一种方法 也许你想问的是这两者之间的区别:
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编译器将查看obj
方法getName
,但在那里找不到它,因此它将尝试在链中查找它。js中的所有对象都具有\uuuuu proto\uuuu
属性。另一个物体所在的位置。当您使用new
关键字创建对象时,结果对象的\uuuu proto\uuuu
设置为function的原型
像这样委托函数的优点是,假设你用这个函数创建了30个对象,那么就不会有30个getName方法了。相反,所有对象仍将引用原型对象,原型对象将具有
getName
方法。因此将有30个参考文献 好吧,试试看。第二个抛出一个异常,所以它显然不同。(实际上)第二个抛出只是一个语法错误。(如果您添加函数()
,它仍然是一个类型错误)
function() Obj {
this.getName = function() {
console.log("my name");
};
}
var obj = new Obj;