亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JavaScript原型

afishhhhh / 2949人閱讀

摘要:而這個(gè)原型對象作為這個(gè)構(gòu)造函數(shù)的一個(gè)屬性,是被其創(chuàng)建出來的所有實(shí)例共享的。

構(gòu)造函數(shù)創(chuàng)建對象帶來的問題

上一篇文章介紹了JavaScript創(chuàng)建對象的幾種方法,都有各自的優(yōu)缺點(diǎn)。
構(gòu)造函數(shù)看起來好像很好,但是它也有一個(gè)問題,那就是創(chuàng)建出來的每一個(gè)實(shí)例對象的方法都是一個(gè)獨(dú)立的函數(shù),即使他們的內(nèi)容是完全相同的,這是不符合函數(shù)的代碼復(fù)用原則的,而且也不能夠統(tǒng)一的修改已被創(chuàng)建的實(shí)例的方法。

    function Person(name, age, sex) {
        this.name = name;
        this.age  = age;
        this.sex  = sex;
        
        this.introduce = function () {
            console.log("我叫" + this.name + ", 今年" + this.age + "歲.");
        };
    }
    
    var jerry = new Person("Jerry", "21", "M");
    var julia = new Person("Julia", "27", "F");

    console.log(jerry.introduce === julia.introduce);        // false

上述代碼中的jerry對象和julia對象的introduce()方法是兩個(gè)獨(dú)立的函數(shù),數(shù)據(jù)不共享,如果對象創(chuàng)建更多就浪費(fèi)了大量的內(nèi)存空間。

JavaScript原型解決方案

在 JavaScript 中,每當(dāng)定義一個(gè)對象(函數(shù)也是對象)時(shí)候,對象中都會(huì)包含一些預(yù)定義的屬性。其中每個(gè)函數(shù)對象都有一個(gè) prototype 屬性,這個(gè)屬性指向函數(shù)的原型對象。

那么,這個(gè)原型對象有什么作用呢?
構(gòu)造函數(shù)是一個(gè)函數(shù)對象,所以就會(huì)有一個(gè) prototype 屬性,也就有了一個(gè)原型對象,既然這是一個(gè)對象,那么久可以為它添加屬性和方法。而這個(gè)原型對象作為這個(gè)構(gòu)造函數(shù)的一個(gè)屬性,是被其創(chuàng)建出來的所有實(shí)例共享的。

所以上面的代碼我們可以這樣改寫

    function Person(name, age, sex) {
        this.name = name;
        this.age  = age;
        this.sex  = sex;
    }

    Person.prototype.introduce = function () {
        console.log("我叫" + this.name + ", 今年" + this.age + "歲.");
    };

    var jerry = new Person("Jerry", "21", "M");
    var julia = new Person("Julia", "27", "F");

    console.log(jerry.introduce === julia.introduce);        // true

這樣就解決了數(shù)據(jù)共享的問題,達(dá)到了代碼復(fù)用的目的,無論通過此構(gòu)造函數(shù)創(chuàng)建了多少個(gè)對象,introduce 方法只會(huì)占用一份內(nèi)存空間。
且可以統(tǒng)一修改所有 Person 構(gòu)造函數(shù)創(chuàng)建的實(shí)例對象的 introduce 方法。

原型對象中的方法是可以相互調(diào)用的
    function Dog(name, age) {
        this.name = name;
        this.age = age;
    }

    Dog.prototype.play = function () {
        console.log("小狗玩耍");
        this.bark();
    };

    Dog.prototype.bark = function () {
        console.log("小狗叫");
    };

    var tom = new Dog("Tom", 3);
    
    tom.play();// 小狗玩耍    小狗叫

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

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

相關(guān)文章

  • 理解JavaScript的核心知識(shí)點(diǎn):原型

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

    iKcamp 評論0 收藏0
  • 如何理解JavaScript原型原型鏈?

    摘要:之前有朋友問怎么去理解原型和原型鏈的問題。理解原型鏈的小技巧將箭頭視作泛化子類到父類關(guān)系那么圖中所有的虛線將構(gòu)成一個(gè)繼承層級,而實(shí)線表示屬性引用。原型鏈?zhǔn)菍?shí)現(xiàn)繼承的重要方式,原型鏈的形成是真正是靠而非。 之前有朋友問怎么去理解原型和原型鏈的問題。這個(gè)問題,在面試中,很多同學(xué)經(jīng)常都會(huì)遇到。這里給大家講講,方便大家記憶。 JavaScript的特點(diǎn)JavaScript是一門直譯式腳本...

    xuexiangjys 評論0 收藏0
  • 如何理解JavaScript原型原型鏈?

    摘要:之前有朋友問怎么去理解原型和原型鏈的問題。理解原型鏈的小技巧將箭頭視作泛化子類到父類關(guān)系那么圖中所有的虛線將構(gòu)成一個(gè)繼承層級,而實(shí)線表示屬性引用。原型鏈?zhǔn)菍?shí)現(xiàn)繼承的重要方式,原型鏈的形成是真正是靠而非。 之前有朋友問怎么去理解原型和原型鏈的問題。這個(gè)問題,在面試中,很多同學(xué)經(jīng)常都會(huì)遇到。這里給大家講講,方便大家記憶。 JavaScript的特點(diǎn)JavaScript是一門直譯式腳本...

    adie 評論0 收藏0
  • 深入理解Javascript原型關(guān)系

    摘要:如下所示在規(guī)范中,已經(jīng)正式把屬性添加到規(guī)范中也可以通過設(shè)置和獲取對象的原型對象對象之間的關(guān)系可以用下圖來表示但規(guī)范主要介紹了如何利用構(gòu)造函數(shù)去構(gòu)建原型關(guān)系。 前言 在軟件工程中,代碼重用的模式極為重要,因?yàn)樗麄兛梢燥@著地減少軟件開發(fā)的成本。在那些主流的基于類的語言(比如Java,C++)中都是通過繼承(extend)來實(shí)現(xiàn)代碼復(fù)用,同時(shí)類繼承引入了一套類型規(guī)范。而JavaScript是...

    ethernet 評論0 收藏0
  • JavaScript基礎(chǔ)之創(chuàng)建對象、原型、原型對象、原型

    摘要:在最開始的時(shí)候,原型對象的設(shè)計(jì)主要是為了獲取對象的構(gòu)造函數(shù)。同理數(shù)組通過調(diào)用函數(shù)通過調(diào)用原型鏈中描述了原型鏈的概念,并將原型鏈作為實(shí)現(xiàn)繼承的主要方法。 對象的創(chuàng)建 在JavaScript中創(chuàng)建一個(gè)對象有三種方式??梢酝ㄟ^對象直接量、關(guān)鍵字new和Object.create()函數(shù)來創(chuàng)建對象。 1. 對象直接量 創(chuàng)建對象最直接的方式就是在JavaScript代碼中使用對象直接量。在ES5...

    wangbjun 評論0 收藏0
  • 細(xì)說 Javascript 對象篇(二) : 原型對象

    摘要:并沒有類繼承模型,而是使用原型對象進(jìn)行原型式繼承。我們舉例說明原型鏈查找機(jī)制當(dāng)訪問一個(gè)對象的屬性時(shí),會(huì)從對象本身開始往上遍歷整個(gè)原型鏈,直到找到對應(yīng)屬性為止。原始類型有以下五種型。此外,試圖查找一個(gè)不存在屬性時(shí)將會(huì)遍歷整個(gè)原型鏈。 Javascript 并沒有類繼承模型,而是使用原型對象 prototype 進(jìn)行原型式繼承。 盡管人們經(jīng)常將此看做是 Javascript 的一個(gè)缺點(diǎn),然...

    lansheng228 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<