这些代码之间有什么区别?

时间:2012-10-07 06:59:16

标签: javascript jquery prototype-oriented

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

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

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

show1show2都可以提醒号码。

这两者有什么区别吗?

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:2)

每个新实例都会复制

show1show2已共享。