は、インスタンスの継承の基本的な例です:あなたが行の前に、両方のケースでは、見ることができるようにJavaScript継承、プロトタイプコンストラクタをリセットしますか?ここ
function A() {
this.props = {
a: 'a',
b: 'b'
}
}
A.prototype = {
fn: function() {
console.log(this.props);
}
}
function B() {
}
B.prototype = {
write: function() {
console.log('good')
}
}
/*
I don't think anyone advocates setting the prototype constructor
as the Function to which it belongs in this case.
*/
console.log(B.prototype.constructor); // ƒ Object() { [native code] }
B.prototype.constructor = B;
console.log(B.prototype.constructor); // ƒ B() {}
var b = new B();
:
function A() {
this.props = {
a: 'a',
b: 'b'
}
}
A.prototype = {
fn: function() {
console.log(this.props);
}
}
function B() {
A.call(this);
}
B.prototype = Object.assign(A.prototype, {
write: function() {
this.fn();
}
});
console.log(B.prototype.constructor); // ƒ Object() { [native code] }
B.prototype.constructor = B;
console.log(B.prototype.constructor); // ƒ B() { A.call(this); }
var b = new B();
そしてここでは、継承せずに同じ機能の例です
B.prototype.constructor = B;
プロトタイプコンストラクタはネイティブObjectコンストラクタであり、その後はプロトタイプが宣言されたObject/Functionです。
古いブラウザでは問題の行が必要ですか、人気のある悪い技術と戦う必要がありましたか、またはプロトタイプの継承を正しく行っていませんか?
どちらの場合でも、新しいオブジェクトで 'B.prototype'を上書きしています。だから、 'コンストラクタ'がなくなった(あなたはそれをリセットしなければならない)。 'B.prototype = {constructor:B、write:...};'のように、 ''コンストラクタ ''のプロパティを 'B.prototype'に代入するオブジェクトリテラルに追加することができます。 –