javascript
JavaScript原型学习
原型:
原型是一個對象,任何對象默認都有一個原型,唯一例外的是默認的對象原型,它在原型鏈的頂端。
?
對象:
對象是無需鍵值對的集合。
在JavaScript中,如果不是一個主數(shù)據(jù)類型(undefined/null/boolean/number/string)就是一個對象。
一個對象的原型,被對象內(nèi)部的[[prototype]]屬性(propety)所持有。
?
原型訪問器:
?、貳CMA標準對象原型訪問器:Object.getPrototype(obj)【FireFox、Chrome支持】
②非標準對象原型訪問器:__proto__ 【除了IE都支持】
?、郛斏鲜?種不起作用時,可通過對象的構(gòu)造函數(shù)找到它的原型:obj.constructor.prototype【所有瀏覽器支持】
當嘗試獲取一個主數(shù)據(jù)類型的原型時,它會被強行轉(zhuǎn)換為一個對象:
false.__proto__ === Boolean(false).__proto__; //true?
?在繼承中使用原型:
原型的魅力在于多個實例共用一個通用原型。
讓一個實例對象 繼承一個已經(jīng)存在的對象(如Array)的功能:
? 原型對象【某個對象(如上述a)的原型引用的對象(如Array)】的屬性【如Array.prototype】一旦定義,就可以被多個引用它的實例所繼承。
?
?原型的繼承也是構(gòu)造函數(shù)之所以存在的原因:
構(gòu)造函數(shù)是一種方便的跨瀏覽器機制,允許在創(chuàng)建實例時 為實例提供一個通用的原型。
constructor.prototype屬性
JavaScript沒有區(qū)別構(gòu)造函數(shù)(constructor)和其他函數(shù),故每個函數(shù)都有一個原型屬性(prototype),不是函數(shù)則沒有。
函數(shù)a的原型屬性(prototype propety)是一個對象,當函數(shù)a創(chuàng)建實例時,函數(shù)的原型屬性會作為原型 賦值給所有對象實例。
即,所有實例的原型(如oIns.__proto__) 引用的都是函數(shù)的原型屬性(如a.prototype)。
?
一個函數(shù)的原型屬性(function`s prototype propety) 與其原型(prototype)沒有關(guān)系:
var a = function(name){this.name = name; } a.prototype == a.__proto__; //false a.__proto__ == Function.prototype; //true?
改變原型引用的原型屬性所在的函數(shù),原型所在的實例會隨著改變:
var A = function(name) {this.name = name;} var B = new A('alpha'); B.name; //'alpha' A.prototype.x = 23; //引用的原型屬性所在的A添加屬性x,原型所在的實例B會隨著添加引用x B.x; //23?
instance?of:判斷原型
?
?
原型的應(yīng)用:實現(xiàn)復(fù)制字符串的方法
String.prototype.times = function(count) {return count < 1 ? '' : new Array(count + 1).join(this); //創(chuàng)建一個數(shù)組,將調(diào)用方法的字符串作為分隔符,轉(zhuǎn)換為字符串 }"hello!".times(3); //"hello!hello!hello!"; 復(fù)制3次"please...".times(6);//"please...please...please...please...please...please..."; 復(fù)制6次?
繼承原理,原型鏈:
每個對象都有一個原型,對象的原型指向父,而父的原型指向父的父,通常把通過原型層層鏈接起來的關(guān)系?稱為原型鏈。
原型鏈的末端一般是?默認的對象原型。
?
原型的繼承機制?是發(fā)生在內(nèi)部且隱式的,當要獲取一個對象的屬性時,JavaScript會在原型鏈中查找該屬性,不存在則返回undefined。
?
譯文:blog.jobbole.com/9648/#comment-15216
英文原文:http://javascriptweblog.wordpress.com/2010/06/07/understanding-javascript-prototypes/
轉(zhuǎn)載于:https://www.cnblogs.com/slowsoul/archive/2013/05/28/3102618.html
總結(jié)
以上是生活随笔為你收集整理的JavaScript原型学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STL容器之优先队列
- 下一篇: 取名无力