过去在 JavaScript 中创建“类”时,我是这样做的:
function Dog(name){
this.name=name;
this.sound = function(){
return "Wuf";
};
}
然而,我只是看到有人这样做:
var Dog = (function () {
function Dog(name) {
this.name = name;
}
Dog.prototype.sound = function () {
return "Wuf";
};
return Dog;
})();
两种方法都可以吗,还是我做错了?在那种情况下,为什么?就我们最终得到的结果而言,两者之间到底有什么区别?在这两种情况下,我们都可以通过以下方式创建一个对象:
var fido = new Dog("Fido");
fido.sound();
希望有人赐教。
最佳答案
你的方式和他们的方式有两个重要的区别。
- 包装在一个自调用函数中 (
(function() { ... })();
) - 对方法使用
.prototype
属性this.
。
将事物包装在一个自调用函数中,然后将结果(如 return
语句中定义的那样)分配给一个称为 module pattern 的变量。这是确保范围更受控制的常见模式。
使用 Dog.prototype.sound = function() {}
优于 this.sound = function()
。不同之处在于,Dog.prototype.sound
为所有具有 Dog
构造函数的对象定义一次,而 this.sound = function() {}
为创建的每个 Dog 对象再次定义。
经验法则是:对于一个对象来说,独有的东西(通常是它的属性)要定义在 this
上,而对所有相同类型的对象(通常是函数)共享的东西) 将在原型(prototype)上定义。
关于javascript - 关于如何在 JavaScript 中创建类的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29234385/