摘要:對象的屬性的方法屬性為對象所屬的那一類所共有。對象原型鏈通過屬性向上尋找。為指定之外的原始類型值是無效的。構造函數模式的繼承如果沒有明確指定,通過構造函數創建的對象的屬性值為構造函數的屬性。
對象的 prototype 屬性的方法、屬性為對象所屬的那一“類”所共有。對象原型鏈通過 __proto__ 屬性向上尋找。
為 __proto__ 指定 null 之外的原始類型(Number, String, Boolean, undefined, Symbol)值是無效的。
通過構造函數或者 {} 方式創建的對象的 prototype 屬性默認為 undefined
var a = { x: 10, calculate: function (z) { return this.x + this.y + z; } }; var b = { y: 20, __proto__: a }; var c = { y: 30, __proto__: a }; // call the inherited method b.calculate(30); // 60 c.calculate(40); // 80
如果沒有明確指定,那么 __proto__ 默認為 Object.prototype,而Object.prototype 自身也有 __proto__ ,值為 null,是原型鏈的終點。
構造函數模式的繼承If a prototype is not specified for an object explicitly, then the default value for __proto__ is taken — Object.prototype. Object Object.prototype itself also has a __proto__, which is the final link of a chain and is set to null.
// a constructor function function Foo(y) { // which may create objects // by specified pattern: they have after // creation own "y" property this.y = y; } // also "Foo.prototype" stores reference // to the prototype of newly created objects, // so we may use it to define shared/inherited // properties or methods, so the same as in // previous example we have: // inherited property "x" Foo.prototype.x = 10; // and inherited method "calculate" Foo.prototype.calculate = function (z) { return this.x + this.y + z; }; // now create our "b" and "c" // objects using "pattern" Foo var b = new Foo(20); var c = new Foo(30); // call the inherited method b.calculate(30); // 60 c.calculate(40); // 80 // let"s show that we reference // properties we expect console.log( b.__proto__ === Foo.prototype, // true c.__proto__ === Foo.prototype, // true // also "Foo.prototype" automatically creates // a special property "constructor", which is a // reference to the constructor function itself; // instances "b" and "c" may found it via // delegation and use to check their constructor b.constructor === Foo, // true c.constructor === Foo, // true Foo.prototype.constructor === Foo, // true b.calculate === b.__proto__.calculate, // true b.__proto__.calculate === Foo.prototype.calculate // true );
如果沒有明確指定,通過構造函數創建的對象的 __proto__ 屬性值為構造函數的 prototype 屬性。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79995.html
摘要:今天同事小英童鞋問了我一個問題小英童鞋認為的原型對象是,所以會繼承的屬性,調用相當于調用,但結果不是一個方法。構造函數創建對象實例函數有兩個不同的內部方法和。如果不通過關鍵字調用函數,則執行函數,從而直接執行代碼中的函數體。 今天同事小英童鞋問了我一個問題: function Foo(firstName, lastName){ this.firstName = firstNam...
摘要:了解中原型以及原型鏈只需要記住以下點即可對象都有屬性,指向構造函數的構造函數函數都有屬性,指向構造函數的原型對象的內置構造函數可知所有的構造函數都繼承于甚至包括根構造器及自身。 了解JavaScript中原型以及原型鏈只需要記住以下2點即可 對象都有__proto__屬性,指向構造函數的prototype 構造函數函數都有prototype屬性,指向構造函數的原型 1、對象的__p...
這篇文章主要 解決的問題 是:什么是__proto__?什么是prototype?他們的關系是什么?在原型鏈中扮演什么角色? proto和prototype prototype是函數的一個屬性,在定義構造函數的時候自動創建,它指向函數的原型,被 __proto__指向。這個原型對象里包含著自定義的方法屬性。 __proto__是對象的內部屬性,它指向構造器的prototype,對象依賴它來進...
摘要:在創建對象不論是普通對象還是函數對象的時候,都有一個叫做的內置屬性,用于指向創建它的構造函數的原型對象,也就是。因為一個普通對象的構造函數所以原型鏈原型鏈的形成是真正是靠而非。參考文章最詳盡的原型與原型鏈終極詳解,沒有可能是。 【前端芝士樹】Javascript的原型、原型鏈以及繼承機制 前端的面試中經常會遇到這個問題,自己也是一直似懂非懂,趁這個機會整理一下 0. 為什么會出現原型和...
摘要:說白了,原型就是構造函數用來構造新實例的模板對象。什么是原型鏈先回答什么是原型。例如這個原型的原型就是這個構造函數的,既這個原型對象。這些原型對象通過像鏈子一樣連起來,就叫做原型鏈。 原型鏈初步學習 這篇博客只是我初步理解原型鏈的一個個人學習筆記,寫的比較粗略,且有的地方可能理解錯誤. 更多更專業的關于原型鏈的解釋請看JavaScript深入之從原型到原型鏈和阮一峰的博客:Javas...
摘要:所以繼承了對象的所有方法,當你用時,會先查一下它的構造函數的原型對象有沒有有方法,沒查到的話繼續查一下的原型對象有沒有這個方法。 普通函數與構造函數的區別 在命名規則上,構造函數一般是首字母大寫,普通函數遵照小駝峰式命名法。 在函數調用的時候: function fn() { } 構造函數:1. new fn( ) 2 .構造函數內部會...
閱讀 2386·2021-09-22 16:01
閱讀 3154·2021-09-22 15:41
閱讀 1171·2021-08-30 09:48
閱讀 490·2019-08-30 15:52
閱讀 3324·2019-08-30 13:57
閱讀 1713·2019-08-30 13:55
閱讀 3649·2019-08-30 11:25
閱讀 757·2019-08-29 17:25