选项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
添加了方法,两者都有效。但是在创建对象时这两个选项有什么不同吗?
答案 0 :(得分:4)
使用选项1,如果创建100 Gadgets
,则会为内存中的每个对象创建100个whatAreYou
函数。
使用选项2,如果您创建100 Gadgets
,则内存中仅存在1个whatAreYou
函数,每个Gadget
都通过小工具原型链接到该函数
基本上使用原型可以提高内存效率。
答案 1 :(得分:1)
原型是JavaScript的面向对象代码形式。 它将该方法与Gadget的所有实例相关联。
Option1只会将方法添加到单个实例,因此其他小工具实例将无法看到它。相反,在所有实例中都会存在该方法的本地副本,这意味着您将经历n次创建开销和内存占用