2016-11-06 33 views
3

我们如何将es6类​​方法填充到ES5中?什么是ES5中ES6方法(类)的等价物?

我正在读一本书,它说以下内容:

class Ninja { 
    constructor(name) { 
     this.name = name; 
    } 

    swingSword() { 
     return true; 
    } 
} 

相同

function Ninja(name) { 
    this.name = name; 
} 

Ninja.prototype.swingSword = function() { 
    return true; 
}; 

我只是问为什么我们在原型添加swingSword,而不是里面的构造函数?

因为函数应该在对象上而不是在原型链上。

我是对还是错?

+1

你错了,这本书是对的。 –

回答

0

它应该在原型上,方法不是每个实例的数据。无法想象任何以这种方式实现它的语言,类的整个概念就是拥有一组具有相同方法的对象。

如果将它放在构造函数中,它将是每个实例使用构造函数创建的唯一函数。例如,1000个对象== 1000个函数,每个“方法”。

+0

感谢您的回答。现在我懂了。 –

+0

当然没有问题,请点击该复选标记以接受它作为正确答案;-) –

0

仅将该功能添加到对象只能用于Ninja。要创建一个扩展为Ninja的类,例如Kunoichi,通常需要复制Ninja原型。不幸的是,因为swingSword不在原型中,所以你的Kunoichi不能挥动剑。

您必须在原型中添加该函数以允许扩展该类。

相关问题