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

資訊專欄INFORMATION COLUMN

javascript原型概念(一)

chinafgj / 3089人閱讀

摘要:注意,此處的構(gòu)造函數(shù)指的是使用方式的構(gòu)造函數(shù)。也就是說,你可以在支持該實現(xiàn)的瀏覽器下,,,去訪問對象的構(gòu)造函數(shù)的原型對象。另外一種判斷實例對象和其原型對象存在指向關(guān)系由實例的指向其構(gòu)造函數(shù)的原型對象的方法是。

這里,我們列出原型的幾個概念,如下:

prototype屬性

[[prototype]]

__proto__

prototype屬性

只要創(chuàng)建了一個函數(shù),就會為該函數(shù)創(chuàng)建一個prototype屬性,指向該函數(shù)的原型對象。實例對象是不會擁有該屬性的。
默認情況下,該原型對象也會獲得一個constructor屬性,該屬性包含一個指針,指向prototype屬性所在的函數(shù)。

function Person() {}// 只是一個函數(shù)而已
Person.prototype.constructor === Person
[[prototype]]和__proto__

javascript中,不可以訪問的內(nèi)部屬性都是用[[propertyName]]這種形式來表示的,比如還有枚舉屬性[[Enumberable]]。

[[prototype]]屬性只能是對象可以擁有的屬性。比如實例化的對象以及原型對象,而不是構(gòu)造函數(shù)。這個屬性指向擁有其屬性的對象的構(gòu)造函數(shù)的原型對象。注意,此處的構(gòu)造函數(shù)指的是使用new方式的構(gòu)造函數(shù)。并不因為更改了原型對象上的constructor屬性而改變。

比如:

function Person() {}
Person.prototype.constructor = {}; // 此處修改了Person原型的構(gòu)造函數(shù)指向
let p = new Person();
p.__proto__ === Person.prototype; // true

__proto__是個啥呢,就是對[[propertyName]]的實現(xiàn)。也就是說,你可以在支持該實現(xiàn)的瀏覽器下(FF,chrome,safari),去訪問對象的構(gòu)造函數(shù)的原型對象。比如:

var Person = function(name) {
    this.name = name;
};

var p1 = new Person();
p1.__proto__=== Person.prototype; // true

Person.prototype = {};

var p2 = new Person();

p2.__proto__ === Object.prototype; // false

當(dāng)然,__proto__只是瀏覽器的私有實現(xiàn),目前ECMAScript標準實現(xiàn)方法是Object.getPrototypeOf(object)。

var Person = function(name) {
    this.name = name;
};

var p1 = new Person();
Object.getPrototypeOf(p1) === Person.prototype; // true

Person.prototype = {};

var p2 = new Person();

Object.getPrototypeOf(p2) === Object.prototype; // false

另外一種判斷實例對象和其原型對象存在指向關(guān)系(由實例的[[prototype]]指向其構(gòu)造函數(shù)的原型對象)的方法是:isPrototypeOf。比如:

Person.prototype.isPrototypeOf(p1); // true

由于函數(shù)和原型對象也是一個對象,所以,它自然而然也擁有[[prototype]]屬性。

弄清楚了這些概念,原型鏈,繼承等存在的一些問題,都不是問題了。

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

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

相關(guān)文章

  • 理解JavaScript的核心知識點:原型

    摘要:首先,需要來理清一些基礎(chǔ)的計算機編程概念編程哲學(xué)與設(shè)計模式計算機編程理念源自于對現(xiàn)實抽象的哲學(xué)思考,面向?qū)ο缶幊淌瞧湟环N思維方式,與它并駕齊驅(qū)的是另外兩種思路過程式和函數(shù)式編程。 JavaScript 中的原型機制一直以來都被眾多開發(fā)者(包括本人)低估甚至忽視了,這是因為絕大多數(shù)人沒有想要深刻理解這個機制的內(nèi)涵,以及越來越多的開發(fā)者缺乏計算機編程相關(guān)的基礎(chǔ)知識。對于這樣的開發(fā)者來說 J...

    iKcamp 評論0 收藏0
  • 和少婦白潔起學(xué)JavaScript

    摘要:我們已經(jīng)回答了的構(gòu)造函數(shù)和原型都是誰的問題,現(xiàn)在牽扯出來一個,我們繼續(xù)檢查的構(gòu)造函數(shù)是全局對象上屬性叫的對象的原型是個匿名函數(shù),按照關(guān)于構(gòu)造函數(shù)的約定,它應(yīng)該是構(gòu)造函數(shù)的屬性我們給這個對象起個名字,叫。 我不確定JavaScript語言是否應(yīng)該被稱為Object-Oriented,因為Object Oriented是一組語言特性、編程模式、和設(shè)計與工程方法的籠統(tǒng)稱謂,沒有一個詳盡和大家...

    DevTTL 評論0 收藏0
  • 徹底搞懂JavaScript中的繼承

    摘要:這正是我們想要的太棒了毫不意外的,這種繼承的方式被稱為構(gòu)造函數(shù)繼承,在中是一種關(guān)鍵的實現(xiàn)的繼承方法,相信你已經(jīng)很好的掌握了。 你應(yīng)該知道,JavaScript是一門基于原型鏈的語言,而我們今天的主題 -- 繼承就和原型鏈這一概念息息相關(guān)。甚至可以說,所謂的原型鏈就是一條繼承鏈。有些困惑了嗎?接著看下去吧。 一、構(gòu)造函數(shù),原型屬性與實例對象 要搞清楚如何在JavaScript中實現(xiàn)繼承,...

    _ivan 評論0 收藏0
  • 面向?qū)ο蟮?JavaScript

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

    novo 評論0 收藏0
  • javascript中function(){}(),new function(),new Funct

    摘要:原型之所以被稱為原型,可能正是因為這種不可重載的特質(zhì)。而一旦實例化,那么將指向?qū)嵗膶ο蟆J紫仁?,我使用了,直接利用貓咪的年齡進行計算得出體重返回給屬性。 和java比起來,javascript真的是松散的無以復(fù)加,不過這也讓我們在無聊之余,有精力去探討一些復(fù)雜的應(yīng)用,從而在開發(fā)之路上,獲得一些新的想法。 javascript中的類的構(gòu)造 javascript中有對象的概念,卻沒有類...

    ranwu 評論0 收藏0

發(fā)表評論

0條評論

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