原型继承中的元对象是否在ES5之上有意义?

时间:2017-05-21 07:28:59

标签: javascript

我在这里看到两种原型继承函数创建模式。

Function.prototype.inherit = function( base ) {
    function Meta() {};
    Meta.prototype = base;
    this.prototype = new Meta();
}

Function.prototype.inherit = function( base ) {
    this.prototype = new base();
}

以前的实现似乎没有做任何额外的事情!中间有Meta函数,它的用例是什么?

1 个答案:

答案 0 :(得分:1)

Meta函数的要点是避免通过调用构造函数可能发生的副作用:

function Base() {
    console.log("This should not be called when inheriting!");
}

// If you use `new Base()` as a prototype, an unwanted message is logged

在ES5中,它内置为Object.create

this.prototype = Object.create(base.prototype);

在ES6中,您只需使用a class

class Derived extends Base {
    // ...
}