Javascript对象方法原型
Javascript object methods prototype
下面的区别是什么。哪种方式最好?
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(){}
第一种方法更好,因为您不会将新对象重新构造到原型 - 它会删除可能存在的所有属性。所以第一个被认为更好。
相关文章:
- 使用“;这个“;JavaScript原型方法中的关键字
- 引用类变量中的原型方法
- 如何从对象的原型方法访问JavaScript对象属性
- 如何从构造函数中调用js原型方法
- Javascript不调用原型方法
- 有没有任何情况下,一个方法不应该是原型方法
- 调用影子原型方法的更简单/更好的方法
- 当对象从服务器发送到客户端时,JS原型方法消失了
- 构造 JavaScript Array 原型方法
- 在Javascript中扩展继承的原型方法
- 如何在另一个原型中创建可调用的原型方法
- 覆盖原型方法
- 实现原型方法
- 从原型方法更改实例属性
- XrayWrapper 错误(值是可调用的)在 Firefox 插件中覆盖原型方法时
- 避免在外部称为原型方法中丢失对象实例
- 原型方法不是一个函数,为什么
- 是否可以从 javascript 中的原型方法访问私有类属性
- 找不到 Javascript 原型方法覆盖
- 调用本机原型方法时扩展或继承对象原型