成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Javascript 面向?qū)ο笾械臉?gòu)造函數(shù)和原型對象

microcosm1994 / 654人閱讀

摘要:每一個(gè)對象除外都和另外一個(gè)對象相關(guān)聯(lián),這個(gè)另外一個(gè)對象就是我們熟知的原型,每一個(gè)對象都從原型繼承屬性和行為方法。兩個(gè)構(gòu)造函數(shù)的屬性可能指向同一個(gè)原型對象,這時(shí)通過調(diào)用兩個(gè)構(gòu)造函數(shù)創(chuàng)建的實(shí)例是屬于同一個(gè)類的。

先解釋下原型。每一個(gè)Javascript對象(null除外)都和另外一個(gè)對象相關(guān)聯(lián),這個(gè)“另外一個(gè)對象”就是我們熟知的原型, 每一個(gè)對象都從原型繼承屬性和行為(方法)。

var   a = {}; //原型對象為Object.prototype
var   array = new Array()// 原型對象為Array.prototype
var   myInstance = new MyClass;// 原型對象為MyClass.prototype

在Javascript中,類的所有實(shí)例對象都從同一個(gè)原型對象上繼承屬性,下面先看一個(gè)例子

function Range是 Range類的構(gòu)造函數(shù)用以初始化新創(chuàng)建的Range類的對象,構(gòu)造函數(shù)并沒有創(chuàng)建并返回一個(gè)對象,僅僅是初始化,并且在構(gòu)造函數(shù)中用this設(shè)置的屬性不是每個(gè)實(shí)例共享的,而是獨(dú)享的,this是對當(dāng)前對象的應(yīng)用。

function Range(from, to) {
          if(from)
               this.from = from;//對象的自有屬性,在對象中會覆蓋從原型那里繼承來的from值
          if(to)
               this.to = to; 
}

而所有對象實(shí)例都會繼承的屬性和行為(方法)都在原型對象里

Range.prototype = {
     includes : function(x) {return this.from <= x && x <= this.to},
     
     foreach : function(f) {
           for(var x = Math.ceil(this.form); x < this.from; x++)  f(x);
    },
    
    toString : function() {return "(" + this.from + "......" + this.to + ")";},
    
    from : 1,

    getBeginning : function() {return this.from}
}
var r = new Range(2, 5);
r.include(3);// true , 3在范圍內(nèi)
r.foreach(alert);//輸出2 3 4 5
console.log(r)//
r.getBeginng() // 2 因?yàn)樵跇?gòu)造函數(shù)初始化r的時(shí)候已經(jīng)把屬性“from”設(shè)置成2了

任何Javascript函數(shù)都可以做構(gòu)造函數(shù),并且用new 關(guān)鍵字調(diào)用構(gòu)造函數(shù)時(shí)是要用到一個(gè)prototype屬性的。因此每個(gè)javascript函數(shù)都會自動擁有一個(gè)prototype屬性。比如

Range.prototype.init = function () {}
nr = new Range.prototype.init();// nr 的屬性繼承自Range.prototype.init.prototype

原型對象是類的唯一標(biāo)示,當(dāng)且僅當(dāng)兩個(gè)對象繼承自同一個(gè)原型對象時(shí),他們才是屬于同一個(gè)類的實(shí)例,而初始化對象的構(gòu)造函數(shù)則不能作為類的標(biāo)示。 兩個(gè)構(gòu)造函數(shù)的prototype屬性可能指向同一個(gè)原型對象,這時(shí)通過new調(diào)用兩個(gè)構(gòu)造函數(shù)創(chuàng)建的實(shí)例是屬于同一個(gè)類的。

上面的例子繼續(xù)修改

Range.prototype.init.prototype = Range.prototype;//引用傳遞所以不用擔(dān)心循環(huán)引用;

這樣通過new Range()和 new Range.prototype.init()創(chuàng)建的對象都是屬于Range類的。

console.log((r instanceof Range)); //true
console.log((nr instanceof Range)); //true

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/85761.html

相關(guān)文章

  • JS對象(1)重新認(rèn)識面向對象

    摘要:對象重新認(rèn)識面向?qū)ο竺嫦驅(qū)ο髲脑O(shè)計(jì)模式上看,對象是計(jì)算機(jī)抽象現(xiàn)實(shí)世界的一種方式。除了字面式聲明方式之外,允許通過構(gòu)造器創(chuàng)建對象。每個(gè)構(gòu)造器實(shí)際上是一個(gè)函數(shù)對象該函數(shù)對象含有一個(gè)屬性用于實(shí)現(xiàn)基于原型的繼承和共享屬性。 title: JS對象(1)重新認(rèn)識面向?qū)ο? date: 2016-10-05 tags: JavaScript 0x00 面向?qū)ο?從設(shè)計(jì)模式上看,對象是...

    superw 評論0 收藏0
  • 面向對象JavaScript

    摘要:是完全的面向?qū)ο笳Z言,它們通過類的形式組織函數(shù)和變量,使之不能脫離對象存在。而在基于原型的面向?qū)ο蠓绞街?,對象則是依靠構(gòu)造器利用原型構(gòu)造出來的。 JavaScript 函數(shù)式腳本語言特性以及其看似隨意的編寫風(fēng)格,導(dǎo)致長期以來人們對這一門語言的誤解,即認(rèn)為 JavaScript 不是一門面向?qū)ο蟮恼Z言,或者只是部分具備一些面向?qū)ο蟮奶卣?。本文將回歸面向?qū)ο蟊疽?,從對語言感悟的角度闡述為什...

    novo 評論0 收藏0
  • 重新認(rèn)識JavaScript面向對象: 從ES5到ES6

    摘要:基于原型的面向?qū)ο笤诨谠偷恼Z言中如并不存在這種區(qū)別它只有對象不論是構(gòu)造函數(shù),實(shí)例,原型本身都是對象。允許動態(tài)地向單個(gè)的對象或者整個(gè)對象集中添加或移除屬性。為了解決以上兩個(gè)問題,提供了構(gòu)造函數(shù)創(chuàng)建對象的方式。 showImg(https://segmentfault.com/img/remote/1460000013229218); 一. 重新認(rèn)識面向?qū)ο?1. JavaScript...

    VishKozus 評論0 收藏0
  • 重新認(rèn)識JavaScript面向對象: 從ES5到ES6

    摘要:基于原型的面向?qū)ο笤诨谠偷恼Z言中如并不存在這種區(qū)別它只有對象不論是構(gòu)造函數(shù),實(shí)例,原型本身都是對象。允許動態(tài)地向單個(gè)的對象或者整個(gè)對象集中添加或移除屬性。為了解決以上兩個(gè)問題,提供了構(gòu)造函數(shù)創(chuàng)建對象的方式。 showImg(https://segmentfault.com/img/remote/1460000013229218); 一. 重新認(rèn)識面向?qū)ο?1. JavaScript...

    用戶83 評論0 收藏0
  • 淺談JavaScript面向對象

    摘要:不必在構(gòu)造函數(shù)中定義對象實(shí)例的信息。其次,按照一切事物皆對象的這餓極本的面向?qū)ο蟮姆▌t來說,類本身并不是一個(gè)對象,然而原型方式的構(gòu)造函數(shù)和原型本身也是個(gè)對象。第二個(gè)問題就是在創(chuàng)建子類型的實(shí)例時(shí),不能向超類型的構(gòu)造函數(shù)中傳遞參數(shù)。 前言 對象(Object)應(yīng)該算是js中最為重要的部分,也是js中非常難懂晦澀的一部分。更是面試以及框架設(shè)計(jì)中各出沒。寫這篇文章,主要參考與JavaScrip...

    cyixlq 評論0 收藏0

發(fā)表評論

0條評論

microcosm1994

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<