当我在线研究时,我发现了不同的答案。
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) {
//
}
感谢您的帮助!
答案 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/