hwc*_*rwe 9 javascript oop prototype
目前我正在开发一个我们正在编写面向对象的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;
}
};
Run Code Online (Sandbox Code Playgroud)
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;
};
Run Code Online (Sandbox Code Playgroud)
基于两个给定的示例,JavaScript的行为方式有什么不同,还是仅仅是样式差异?
就个人而言,我没有看到任何行为差异,但我觉得必须有一个微妙的差异,我目前缺少.
除此之外.我想知道这是一种常见的做法,还是有更好的方法来定义类.
有一个微妙的区别.在第一种方法中,当你覆盖原型时,那里有一个现在丢失的属性.这就是constructor,它指向你的功能.构造函数允许您重新创建它的对象类型.
您可以轻松地将其取回,因此可以通过手动设置它来使用第一种方法:
My.Namespace.ClassName.prototype = {
myFunction1: function() {
return this.member1 + " " + this.member2;
},
myFunction2: function(param1) {
this.member3 = paraml;
},
constructor: My.Namespace.ClassName
};
Run Code Online (Sandbox Code Playgroud)
另见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor