2017-05-21 64 views
0

我在這裏看到兩種類型的原型繼承函數創建模式。在protypal繼承的元對象是否有意義ES5以上?

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

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

前實現似乎並不做任何額外的東西!中間有一個Meta函數,它的用例是什麼?

+0

One observatio格式方法在節點6.10中不再起作用。 –

回答

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 { 
    // ... 
}