使用prototype
创建方法和在函数内创建方法有什么区别?例如,下面的methodOne
和methodTwo
之间有什么区别?
function myFunc() {
this.methodOne = function () { console.log("First method.")};
}
myFunc.prototype.methodTwo = function () { console.log("Second method.")};
他们似乎表现得一样:
var myFuncInstance = new myFunc();
myFuncInstance.methodOne();
myFuncInstance.methodTwo();
但我的感觉是methodTwo
,通过直接访问prototype
,正在做一些不同的事情。
答案 0 :(得分:1)
区别在于myFunc
的每个实例共享 methodTwo
的同一个实例,但有methodOne
的实例。
即
var foo = new myFunc();
var bar = new myFunc();
foo.methodOne === bar.methodOne; // false
foo.methodTwo === bar.methodTwo; // true
更进一步,如果要创建1000个myFunc
实例,则创建1000个methodOne
函数,这些函数都执行相同的操作。仍然只有一个methodTwo
函数。
答案 1 :(得分:1)
使用.prototype语法可以向现有对象添加方法。例如,您可以使用
将sum方法添加到数组类型Array.prototype.sum = function(){...}
然后将其用作
var a = [1,2,3]然后执行a.sum()
使用.prototype,您可以根据自己的需要继续扩展,就像在基于类的语言中一样。