成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

JS基礎(chǔ)(對象創(chuàng)建,構(gòu)造函數(shù)、原型、實例之間關(guān)系,繼承方式)

PAMPANG / 3240人閱讀

摘要:對象創(chuàng)建的三種方式字面量創(chuàng)建方式系統(tǒng)內(nèi)置構(gòu)造函數(shù)方式自定義構(gòu)造函數(shù)構(gòu)造函數(shù)原型實例之間的關(guān)系實例是由構(gòu)造函數(shù)實例化創(chuàng)建的,每個函數(shù)在被創(chuàng)建的時候,都會默認(rèn)有一個對象。

JS 對象創(chuàng)建的三種方式
//字面量創(chuàng)建方式
var person= { name:"jack"?。?
//系統(tǒng)內(nèi)置構(gòu)造函數(shù)方式
var person= new Object();
person.name = "jack";

//自定義構(gòu)造函數(shù)
function Person(name){
    this.name = name;
}
var person = new Person("jack");
JS 構(gòu)造函數(shù)、原型、實例之間的關(guān)系

  實例是由構(gòu)造函數(shù)實例化創(chuàng)建的,每個函數(shù)在被創(chuàng)建的時候,都會默認(rèn)有一個prototype對象。該對象就是構(gòu)造函數(shù)的原型,并且原型對象中還有一個constructor屬性,指向的是原型所在的構(gòu)造函數(shù)。

在每一個實例對象中的__proto__中同時有一個 constructor 屬性,該屬性指向創(chuàng)建該實例的構(gòu)造函數(shù)。

構(gòu)造函數(shù)的 prototype對象默認(rèn)都有一個 constructor 屬性,指向 prototype 對象所在函數(shù)。

(圖片原址:https://www.oecom.cn/the-rela...)

值類型成員或者引用類型成員寫入(實例對象.成員 = xx):

當(dāng)實例期望重寫原型對象中的某個普通數(shù)據(jù)成員時實際上會把該成員添加到自己身上,

也就是說該行為實際上會屏蔽掉對原型對象成員的訪問

復(fù)雜類型修改(實例對象.成員.xx = xx):

同樣會先在自己身上找該成員,如果自己身上找到則直接修改,

如果自己身上找不到,則沿著原型鏈繼續(xù)查找,如果找到則修改,

如果一直到原型鏈的末端還沒有找到該成員,則報錯(實例對象.undefined.xx = xx)。

JS 構(gòu)造函數(shù)常用用法
function Person( name,age,job){
    this.name = name;
    this.age = age;
    this.job = job;
}

Person.prototype = {
    constructor:Person, //修正,指向正確的構(gòu)造函數(shù)
    introduce:function(){
        console.log("hello,everybody. my name is"+ this.name +"
")
    }
}  

不需要共享的數(shù)據(jù)寫在構(gòu)造函數(shù)中,需要共享的數(shù)據(jù)寫在原型中。

實例對象使用的屬性或者方法,先在實例中查找,找到了則直接使用,找不到則,去實例對象的__proto__指向的原型對象prototype中找,找到了則使用,找不到則報錯。

原型鏈:是一種關(guān)系,實例對象和原型對象之間的關(guān)系,關(guān)系是通過原型(__proto__)來聯(lián)系的

JS 封裝、繼承、多態(tài)

  面向?qū)ο蟮木幊陶Z言中有類的概念,而JS是基于對象的語言,JS中沒有類,但是JS可以模擬面向?qū)ο蟮乃枷刖幊蹋琂S通過構(gòu)造函數(shù)模擬類的概念。

封裝:一系列屬性放在對象中或者一系列實現(xiàn)某種功能的方法放在對象,就是封裝。
繼承:繼承屬于類與類之間的關(guān)系,JS通過構(gòu)造函數(shù)模擬類,通過原型來實現(xiàn)繼承,繼承的目的是為了實現(xiàn)數(shù)據(jù)共享。
多態(tài):一個對象有不同的行為,或者同一個行為針對不同的對象,產(chǎn)生不同的結(jié)果,要想有多態(tài),就要先有繼承,JS中可以模擬多態(tài)。
JS 繼承方式 借用構(gòu)造函數(shù)繼承:構(gòu)造函數(shù)的名字.call( 當(dāng)前對象,屬性,屬性....)

解決了屬性繼承問題,但是不能繼承父級的方法?! ?/p>

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

function Student(name,age,score) {
    Person.call(this,name,age);
    this.score = score;
}

var Ming = new Student("小明","18","100");
組合繼承:原型繼承 + 借用構(gòu)造函數(shù)繼承 
function Person(name,age){
    this.name = name;
    this.age = age;
}

Person.prototype.introduce = function(){
    console.log("hello,everybody,my name is " + this.name);
}

function Student(name,age,score) {
    Person.call(this,name,age);
    this.score = score;
}

Student.prototype = new Person();
var Ming = new Student("小明","18","100");
寄生組合繼承:寄生式繼承 + 借用構(gòu)造函數(shù)繼承 
function inheritObject(o){
    function F(){};
    F.prototype = o;
    return new F();
}
function inheritPrototype(subclass,superclass){
    var p = inheritObject(superclass.prototype);
    p.constructor = subclass;
    subclass.prototype = p;
}

//定義父類
function SuperClass(name){
    this.name = name;
    this.colors = [red,blue]
}
SuperClass.prototype.getName = function(){
    console.log(this.name);
}    
//定義子類
function SubClass(name,time){
    //構(gòu)造函數(shù)式繼承
    SuperClass.call(this,name);
    this.time = time;
}
//寄生式繼承父類原型
inheritPrototype(SubClass,SuperClass);
//子類新增原型方法
SubClass.prototype.getTime = function(){
    console.log(this.time);
}
模擬多繼承: 
Object.prototype.mix = function(){
    var i = 0,                //從第一個參數(shù)起為被繼承對象
        len = arguments.length,   //獲取參數(shù)長度
        arg;                  //緩存參數(shù)對象
    for(;i < len; i++){
        //緩存當(dāng)前對象
        arg = arguments[i];
        for(var property in arg){
            this[property] = arg[property];
        }
    }
}

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

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/108957.html

相關(guān)文章

  • JS基礎(chǔ)之?dāng)?shù)據(jù)類型、對象、原型、原型鏈、繼承

    摘要:就是通過調(diào)用構(gòu)造函數(shù)而創(chuàng)建的那個對象實例的原型對象。構(gòu)造函數(shù)模式可以創(chuàng)建自定義引用類型,可以像創(chuàng)建內(nèi)置對象實例一樣使用操作符。 數(shù)據(jù)類型: 簡單數(shù)據(jù)類型:Undefined、Null、String、Number、Boolean、Symbol 復(fù)雜數(shù)據(jù)類型:Object // Undefined:聲明,但未初始化 // Null:空對象指針 typeof操作符(檢測基本數(shù)據(jù)類型): ...

    LucasTwilight 評論0 收藏0
  • 重溫JS基礎(chǔ)--繼承

    摘要:繼承了如上,我們通過方法借調(diào)了超類的構(gòu)造函數(shù),實際上是在新創(chuàng)建的實力環(huán)境下調(diào)用了構(gòu)造函數(shù)。組合繼承組合繼承的基本思想將原型鏈和借用構(gòu)造函數(shù)的技術(shù)組合到一塊,從而發(fā)揮二者之長的一種繼承模式。繼承方法在上面這個例子中,構(gòu)造函數(shù)定義了兩個屬性和。 在ECMAScript中只支持實現(xiàn)繼承,而且實現(xiàn)繼承主要是依靠原型鏈來實現(xiàn)的。 1. 什么是原型鏈 繼承基本思想:利用原型讓一個引用類型繼承另一個...

    sixleaves 評論0 收藏0
  • js對象詳解(JavaScript對象深度剖析,深度理解js對象)

    摘要:對象詳解對象深度剖析,深度理解對象這算是醞釀很久的一篇文章了。用空構(gòu)造函數(shù)設(shè)置類名每個對象都共享相同屬性每個對象共享一個方法版本,省內(nèi)存。 js對象詳解(JavaScript對象深度剖析,深度理解js對象) 這算是醞釀很久的一篇文章了。 JavaScript作為一個基于對象(沒有類的概念)的語言,從入門到精通到放棄一直會被對象這個問題圍繞。 平時發(fā)的文章基本都是開發(fā)中遇到的問題和對...

    CatalpaFlat 評論0 收藏0
  • js高級程序設(shè)計-面向對象的程序設(shè)計-閱讀筆記

    摘要:中又兩種屬性數(shù)據(jù)屬性包含一個數(shù)據(jù)值的位置叫做數(shù)據(jù)屬性和訪問器屬性和就是訪問器屬性數(shù)據(jù)屬性而數(shù)據(jù)屬性又有四個這樣的特性是否可配置編輯刪除屬性默認(rèn)是否可以被枚舉即可被默認(rèn)是否可寫默認(rèn)寫不代表刪除這里僅限修改屬性的數(shù)據(jù)值默認(rèn)是設(shè)置了一個空對象定 ECMAScript 中又兩種屬性:數(shù)據(jù)屬性(包含一個數(shù)據(jù)值的位置叫做數(shù)據(jù)屬性)和訪問器屬性(getter() 和 setter()就是訪問器屬性)...

    AlphaWatch 評論0 收藏0
  • 淺析JavaScript中原型及constructor、__proto__、prototype的關(guān)系

    摘要:搞清了構(gòu)造函數(shù)和原型的區(qū)別后,就可以繼續(xù)了。指向構(gòu)造函數(shù)的原型對象,存在于實例與構(gòu)造函數(shù)的原型對象之間。要注意的是當(dāng)我們使用下面這種將整個重寫的情況時,會切斷構(gòu)造函數(shù)和原型之間的聯(lián)系,也就是說不再指向了,而是指向。 前言 先說一說為什么要搞清楚JavaScript的原型,因為這就是JS的根。JavaScript雖然不是一門傳統(tǒng)的面向?qū)ο笳Z言,但它有自己的類和繼承機(jī)制,最重要的就是它采用...

    wenzi 評論0 收藏0

發(fā)表評論

0條評論

PAMPANG

|高級講師

TA的文章

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