目前我正在参与一个编写面向对象JavaScript的项目。在这个项目中,我看到了两种不同的定义类的方法:
1:一次性在原型上声明函数
My.Namespace.ClassName = function(param1, param2) {
this.member1 = param1;
this.member2 = param2;
};
My.Namespace.ClassName.prototype = {
myFunction1: function() {
return this.member1 + " " + this.member2;
},
myFunction2: function(param1) {
this.member3 = paraml;
}
};
2:在原型上单独准备每个函数
My.Namespace.ClassName = function(param1, param2) {
this.member1 = param1;
this.member2 = param2;
};
My.Namespace.ClassName.prototype.myFunction1 = function() {
return this.member1 + " " + this.member2;
};
My.Namespace.ClassName.prototype.myFunction2 = function(param1) {
this.member3 = paraml;
};
这两个示例中的JavaScript行为是否有差异,还是只是样式上的不同?
个人认为没有行为差异,但我感觉可能有微妙的差别,目前还未发现。
此外,我想知道这是否是常见做法,或者是否有更好的定义类的方式。
My.Namespace.ClassName.constructor
存在差异吗? - hwcverweMy.Namespace.ClassName.prototype
带有一个constructor
属性。当你覆盖原型时,构造函数会丢失。 - Scimonster