我刚刚上了一本关于ASP.NET和AJAX的新书,其中有一个这样的样本:
Person = function(firstName) {
this._firstName = firstName;
}
Person.prototype = {
get_FirstName = function() {return this._firstName;}
}
我立即注意到这不是我习惯的,而FireBug显然同意我的说法。我习惯了这样的事情:
Person.protoype = {
get_FirstName: function() {return this._firstName;}
}
这只是作者的一个错字,还是他可能正在使用ASP.NET AJAX库中的一个功能?
此外,上述功能与此之间是否存在差异:
Person.protoype.get_FirstName = function() {
return this._firstName;
}
作者是否只是将两个可接受的相同功能的声明混合在一起?
答案 0 :(得分:2)
第一个问题,是的,我认为这是一个错字。
第二个问题,是的,有区别。不好意思:
Constructor.prototype = { method : function(){} }
继承自定义方法的匿名对象({}
)。
如果这是第二次完成,那么前一个方法将消失,因为继承链现在将指向一个新的匿名对象。
更常见的是:
Constructor.prototype.method = function(){}
只是定义一种新方法。
答案 1 :(得分:1)
对于你的第一个问题,这是一个错字或错误 - 它不是有效的javascript。
关于你的最后一个问题实际上是两个例子之间的区别,如果已经有一些东西附加到原型上。设置原型属性的第一个将删除先前对原型进行的任何其他操作,而第二个仅添加已经存在的内容。我会(并且确实)使用第二种方法,为原型添加一个新属性。
答案 2 :(得分:1)
对于问题的第二部分,如果您使用不将新对象分配给prototype属性,则可以使用继承:
Person = function( ) {
};
Person.prototype = new Individual( );
Person.protoype.set_LastName = function( lastname) {
this.lastName = lastname
};
//inherited from Individual:
Person.get_FirstName( );
答案 3 :(得分:1)
示例中存在一些问题:
Person
应与var
一起声明。建议始终使用变量进行此操作。