Javascript - 是在类原型或属性中定义的方法吗?

时间:2016-11-16 15:14:23

标签: javascript ecmascript-6

当我在线研究时,我发现了不同的答案。

class Foo {
    constructor() {
        this.data = [];
    }

    add(x) {
        //
    }
}

以上代码是否等同于代码A或代码B?

代码A:

function Foo() {
    this.data = [],
    this.add = function(x) {
        //
    }
}

代码B:

function Foo() {
    this.data = []
}

Foo.prototype.add = function(x) {
    //
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

示例中的代码B,这是一个取自https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes

的示例
class Animal { 
  speak() {
    return this;
  }
  static eat() {
    return this;
  }
}

let obj = new Animal();
let speak = obj.speak;
speak(); // undefined

let eat = Animal.eat;
eat(); // undefined

相同
function Animal() { }

Animal.prototype.speak = function(){
  return this;
}

Animal.eat = function() {
  return this;
}

let obj = new Animal();
let speak = obj.speak;
speak(); // global object

let eat = Animal.eat;
eat(); // global object

请注意,这是使用ES6表示法,在撰写本文时并未完全支持。请参阅此处了解支持ES6的内容 - https://kangax.github.io/compat-table/es6/