【问题标题】:Javascript prototypes methods vs. internal methods [duplicate]Javascript原型方法与内部方法[重复]
【发布时间】:2015-06-22 03:39:35
【问题描述】:

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

【问题讨论】:

    标签: javascript prototype function-prototypes


    【解决方案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 函数。

    【讨论】:

      【解决方案2】:

      使用 .prototype 语法,您可以向现有对象添加方法。例如,您可以使用

      向数组类型添加 sum 方法

      Array.prototype.sum = function() {...}

      然后将其用作

      var a = [1,2,3] 然后做 a.sum()

      使用 .prototype,您可以像在基于类的语言中一样继续根据您的需要进行扩展。

      【讨论】:

      • 虽然你说的是对的,但它并不能真正回答问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多