2
function Demo() {
   this.show1 = function() { alert(1) }
}

Demo.prototype.show2 = function() { alert(2) }

var d = new Demo
d.show1()
d.show2()

show1并且show2可以同时报警号码。

这两者有什么区别吗?

4

2 回答 2

6

是的,如果您在构造函数中初始化该方法,例如 ( this.method = function () {};),您的所有 1000 个对象实例都将拥有一个函数对象作为自己的属性。

好吧,这是最轻量级的方法,假设你在某个构造函数的原型中有一个方法,并且你创建了 1000 个对象实例,所有这些对象的原型链中都会有你的方法,并且它们都只会引用一个函数对象。

在第二种情况下,只有那些在 之后创建的对象Demo.prototype.show2 = function(){alert(2)}才能获得代码。:)

例子

你的代码

function Demo(){
   this.show1 = function(){alert(1)}
}

Demo.prototype.show2 = function(){alert(2)}

var d = new Demo
d.show1()
d.show2()

其他案例

function Demo(){
   this.show1 = function(){alert(1)}
}

var d = new Demo

Demo.prototype.show2 = function(){alert(2)}

d.show1()
d.show2()
于 2012-10-07T07:02:22.287 回答
2

show1在每个新实例上复制。show2是共享的。

于 2012-10-07T07:01:15.763 回答