您能否请您推荐以下哪种方式最佳或优缺点? 我不确定,但也许,这取决于使用的类型? 在性能方面比一个更重(将类保持在内存等)?
提前致谢!
方法1
var MyClass = function(something) {
this.something = something;
}
MyClass.prototype = {
myMethod: function(arg) {
this.arg = arg;
return this.arg;
},
mySecondMethod: function() {
return "helloWorld";
}
}
方法2
var MyClass = (function () {
function MyClass(something) {
this.something = something;
}
MyClass.prototype.myMethod = function (arg) {
this.arg = arg;
return this.arg;
};
MyClass.prototype.mySecondMethod = function (arg) {
return "helloWorld";
}
return MyClass;
})();
答案 0 :(得分:3)
主要有两点不同:
在第一种方法中,您将使用全新对象替换默认原型。没关系,但MyClass的实例将继承错误的constructor
属性。你可以用以下方法解决这个问题:
MyClass.prototype = {
constructor: MyClass
myMethod: // etc...
或者只是扩展默认原型:
var MyClass = function(something) {
this.something = something;
}
MyClass.prototype.myMethod = function(arg) {
this.arg = arg;
return this.arg;
}
在第二种方法中,您将整个事物包装在一个立即调用的函数中。如果你想拥有“私有”(实际上是私有的)变量,这很有用,因为内部声明的变量将被内部声明的函数可见,但不会泄漏到外部范围:
var MyClass = (function () {
var privateVar = "something"; // this will be visible by the functions
// below but not outside
function MyClass(something) {
this.something = something;
}
MyClass.prototype.myMethod = function (arg) {
this.arg = arg;
return this.arg;
};
// You were missing this
return MyClass;
})();
这些是差异。两者最终都做同样的事情:创建一个构造函数,其中一些属性/方法附加到原型。 “优化”方面没有区别。