ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript クラスと継承コンストラクターattribute_js オブジェクト指向

JavaScript クラスと継承コンストラクターattribute_js オブジェクト指向

WBOY
WBOYオリジナル
2016-05-16 18:33:14906ブラウズ

コンストラクター プロパティは常に、現在のオブジェクトを作成したコンストラクターを指します。たとえば、次の例:

コード をコピーします。 コードは次のとおりです:

/ / 同等の場合 var foo = new Array(1, 56, 34, 12);
var arr = [1, 56, 34, 12];
console.log(arr.constructor === Array); // true
// var foo = new Function();
var Foo = function() { };
console.log(Foo.constructor === Function); 🎜 >// コンストラクターによって obj オブジェクトをインスタンス化します
var obj = new Foo();
console.log(obj.constructor === Foo); // 上記の 2 つを置き換えますコードをまとめると、次の結論が得られます。
console.log(obj.constructor.constructor === Function); // true


しかし、コンストラクターがプロトタイプに遭遇すると、興味深いことが起こります。起こる それはただ起こっただけです。
各関数にはデフォルトの属性プロトタイプがあり、このプロトタイプのコンストラクターはデフォルトでこの関数を指すことがわかっています。次の例に示すように:


関数 人(名前) {
this.name = 名前;
person.prototype.getName = function() {
this.name を返す
}; new Person("ZhangSan ");
console.log(p.constructor === 人); // true
console.log(person.prototype.constructor === 人); // true >// 上記になります。 2 行のコードを結合すると、次の結果が得られます。
console.log(p.constructor.prototype.constructor === Person) // true


関数のプロトタイプを再定義すると (注: 上記の例との違いは、変更ではなく上書きです)、次の例に示すように、コンストラクター属性の動作が少し奇妙になります:



コードをコピーします
コードは次のとおりです: function Person(name) { this.name =名前; };
人物.prototype = {
getName: function () {
この名前を返します;
}; "ZhangSan");
console.log(p.constructor === 人); // false
console.log(Person.prototype.constructor === 人); // false
コンソール。 log(p.constructor.prototype.constructor === 人); // false


なぜですか?
Person.prototype を上書きすると、次のコード操作と同等であることがわかります:



コードをコピー


コードは次のとおりです:
constructor 属性は常にそれ自体を作成するコンストラクターを指します。そのため、この時点では Person.prototype.constructor === オブジェクト、つまり




コードをコピーします

コードは次のとおりです。 >person.prototype = {
getName: function() { この問題を解決するにはどうすればよいですか?方法も非常に簡単で、 Person.prototype.constructor を再度上書きするだけです:




コードをコピー


コードは次のとおりです。


function person(name) {
this.name = name;
}
person.prototype = new Object({
getName: function() {
return this.name ;
}
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。