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