JavaScriptのプロトタイプとコンストラクターについて簡潔にまとめ_基礎知識

WBOY
リリース: 2016-05-16 16:53:20
オリジナル
1191 人が閲覧しました

1. コンストラクター
コンストラクターの値は関数です。 JavaScript では、null および unknown 以外の型の値、配列、関数、およびオブジェクトにはコンストラクター属性があります。コンストラクター属性の値は、値、配列、関数、またはオブジェクトのコンストラクターです。例:

コードをコピー コードは次のとおりです:
var a = 12, // Number
b = 'str', // String
c = false, // ブール値
d = [1, 'd', function() { return 5], // Array
e = { name: 'e' }, // Object
f = function() { return 'function' } // Function

console.log('a: ', a.constructor; ); // Number()
console.log('b: ', b.constructor); // String()
console.log('c: ', c.constructor); )
console.log('d: ', d.constructor); // Array()
console.log('e: ', e.constructor); // Object()
コンソール。 log(' f: ', f.constructor); // Function()

上記のコンストラクターはすべて JavaScript に組み込まれています。

コードをコピー のようにカスタマイズすることもできます。コードは次のとおりです。

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

var a = new A('a');

console.log(a.constructor) // A(name)
;

コンストラクターを呼び出すときは、new キーワードを使用する必要があります。コンストラクターはオブジェクトを返します。次のコードを見るとわかります。

コードをコピーします。 コードは次のとおりです:
var a = 4;
var b = new Number(4);

console.log('a : ', typeof a) ; // a: 数値
console.log('b: ', typeof b); // b: オブジェクト

2. プロトタイプ
プロトタイプは関数の属性です。デフォルトでは、関数のプロトタイプ属性の値は関数と同じ名前の空のオブジェクトです。物体。例:

コードをコピー コードは次のとおりです。
function fn() {}

console .log(fn.prototype) // fn { }

prototype 属性は主に、次のような JavaScript で継承を実装するために使用されます。

コードをコピー コードは次のとおりです。
function A(name) {
this.name = name;
}

A.prototype.show = function() {
console.log(this. name);
};

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

B.prototype = A.prototype;

var test = new B('test');

test.show() // テスト

ここで問題があります。テストのコンストラクターは実際には関数 B ではなく関数 A です。

console.log(test.constructor); // A(name)


これは、B.prototype = A.prototype が B のコンストラクターを変更するためです。プロトタイプを A に変換するため、B.prototype のコンストラクターを復元する必要があります:
コードをコピー コードは次のとおりです:
function A( name) {
this.name = name;
}

A.prototype.show = function() {
console.log(this.name) ;
};

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

B.prototype = A.prototype;
B. prototype.constructor = B;

var test = new B('test');

test.show(); // test
console.log(test.constructor); // B(名前)

これを行う理由は、prototype の値がオブジェクトであり、そのコンストラクター、つまりそのコンストラクター属性の値が、それが含まれる関数であるためです。つまり、

コードをコピーします コードは次のとおりです。
console.log(A.prototype.constructor === A) // true

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート