过去在JavaScript中创建"类"时,我这样做了:
function Dog(name){
this.name=name;
this.sound = function(){
return "Wuf";
};
}
Run Code Online (Sandbox Code Playgroud)
但是,我只是看到有人这样做:
var Dog = (function () {
function Dog(name) {
this.name = name;
}
Dog.prototype.sound = function () {
return "Wuf";
};
return Dog;
})();
Run Code Online (Sandbox Code Playgroud)
你可以两种方式做到,还是我做错了?在那种情况下,为什么?那两者在我们最终的结果方面究竟有什么区别?在这两种情况下,我们都可以创建一个对象:
var fido = new Dog("Fido");
fido.sound();
Run Code Online (Sandbox Code Playgroud)
我希望有人能开导我.
Mad*_*iha 15
你和他们的方式有两个重要的区别.
(function() { ... })();).prototype属性over this.方法.在自调用函数中包装事物,然后将结果(在return语句中定义为变量)分配给模块模式.这是确保范围更受控制的常见模式.
使用Dog.prototype.sound = function() {}是优选的this.sound = function().不同之处在于,Dog.prototype.sound使用Dog构造函数为所有对象定义了一次,并且为每个创建的Dog对象this.sound = function() {}再次定义了该属性.
经验法则是:定义对象的个体(通常是其属性)this,而对同一类型的所有对象(通常是函数)共享的东西将在原型上定义.