2017-06-24 18 views
0

本のプロJavascriptの設計パターンでは、継承を実装する方法の1つは、拡張関数を使用することです。Javascript継承異なる拡張関数の実装

function extend(subClass, superClass) { 
    var F = function() {}; 
    F.prototype = superClass.prototype; 
    subClass.prototype = new F(); 
    subClass.prototype.constructor = subClass; 
} 

使用例

function Person(name) { 
    this.name = name; 
} 
Person.prototype.getName = function() { 
    return this.name; 
} 
function Author(name, books) { 
    Person.call(this, name); 
    this.books = books; 
} 
extend(Author, Person); 

それでは、なぜ同じ機能がこのように実装することはできませんか?

function extend(subClass, superClass) { 
    subClass.prototype.__proto__ = superClass.prototype 
} 

2つの実装の違いは同じですか?

+0

IE <11 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/protoの中でも '__proto__'はサポートされていませんでした。 – Xotic750

答えて

1

__proto__は標準のJavaScript機能ではありません。動作することは保証されていません。現代のブラウザでは、これを使用することができますが、技術的には内部的なメカニズムであると考えられており、使用しないでください。

このように、この例ではそのように実行されなかった可能性があります。

関連する問題