Javascript原型方法与内部方法

时间:2015-06-22 03:39:35

标签: javascript prototype function-prototypes

使用prototype创建方法和在函数内创建方法有什么区别?例如,下面的methodOnemethodTwo之间有什么区别?

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,正在做一些不同的事情。

2 个答案:

答案 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,您可以根据自己的需要继续扩展,就像在基于类的语言中一样。