0

选项1:

<script>
function Gadget(name, color) { 
   this.name = name; 
   this.color = color; 
   this.whatAreYou = function(){ 
     return 'I am a ' + this.color + ' ' + this.name; 
   }
}
var user = new Gadget('David', 'White');
console.log(user.whatAreYou());
</script>

选项 2:

<script>
function Gadget(name, color) { 
   this.name = name; 
   this.color = color;  

}
Gadget.prototype = {
    whatAreYou: function(){ 
     return 'I am a ' + this.color + ' ' + this.name; 
   }
}
var user = new Gadget('David', 'White');
console.log(user.whatAreYou());
</script>

问题:

选项1,我将方法放入function();选项2,我通过添加方法prototype,它们都有效。但是在创建对象时这两个选项有什么不同吗?

4

2 回答 2

4

使用选项 1,如果您创建 100 GadgetswhatAreYou则会为内存中的每个对象创建 100 个函数。

使用选项 2,如果您创建 100 ,则内存中Gadgets仅存在 1 个函数,每个函数都通过小工具的原型链接到该函数 whatAreYouGadget

基本上使用原型的内存效率更高。

于 2013-06-18T03:31:08.713 回答
1

原型是 JavaScript 的面向对象代码的形式。它将方法与 Gadget 的所有实例相关联。

Option1 只会将该方法添加到单个实例,因此其他小工具实例将看不到它。相反,在所有实例中都会存在该方法的本地副本,这意味着您将经历 n 次创建开销和内存占用

于 2013-06-18T03:30:58.267 回答