国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript的面向?qū)ο?

Charlie_Jade / 593人閱讀

摘要:這個通過構(gòu)造函數(shù)生成的對象,有一個屬性,它指向構(gòu)造函數(shù)的原型對象,既訪問時,在它自身尋找該屬性,找到了,于是就返回該值。

JavaScript的面向?qū)ο笈c其他語言的面向?qū)ο螅鋵?shí)有很大的區(qū)別。

JavaScript是基于原型的面向?qū)ο笙到y(tǒng),而傳統(tǒng)語言(比如java)的面向?qū)ο蠖际腔陬惖摹?/p> 構(gòu)造函數(shù)

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

Person.prototype.sayName = function() {
    console.log(this.name);
}
var cody = new Person("cody", "24", "frontend");
cody.name;
cody.sayName();

在這個常見的構(gòu)造函數(shù)寫法中,我們需要知道以下幾點(diǎn):

1.Person這個函數(shù)被定義后,會自帶一個prototype屬性,這個屬性指向一個對象,既原型對象,這個對象同時有一個constructor屬性,指向Person

Person.prototype = {
    constructor: Person
}

注意的是,所有函數(shù)都有prototype屬性,并不是只有構(gòu)造函數(shù)才有。

2.cody這個通過構(gòu)造函數(shù)生成的對象,有一個__proto__屬性,它指向構(gòu)造函數(shù)Person的原型對象,既Person.prototype
訪問cody.name時,在它自身尋找該屬性,找到了,于是就返回該值。
訪問cody.sayName時,也是先在它自身尋找該屬性,但是無法找到,于是開始通過原型鏈向上尋找: 尋找cody.__proto__,也就是Person.prototype原型對象,發(fā)現(xiàn)了該屬性,于是返回這個方法。
訪問cody.toString時,在Person.prototype原型對象上也找不到,這時,繼續(xù)向上尋找,既尋找Person.prototype.__proto__也就是Object.prototype,在它上面,可以找到toString

繼承
function Animal(name) {
    this.name = name;
}
Animal.prototype.sayName = function() {
    console.log(this.name);
}

function Duck(name, color) {
    Animal.call(this, name);
    this.color = color;
}

Duck.prototype = new Animal();
// 也可以優(yōu)化成這樣,減少一次父級構(gòu)造函數(shù)調(diào)用
// Duck.prototype = Object.create(Animal.prototype);
Duck.prototype.constructor = Duck;
Duck.prototype.sayColor = function() {
    console.log(this.color);
}
var duck = new Duck("duck", "yellow");
duck.sayColor();
duck.sayName();

前面我們說過,JS是基于原型的面向?qū)ο蟆K裕^承并不一定需要使用構(gòu)造函數(shù),我們可以基于一個已經(jīng)存在的對象,對這個對象進(jìn)行繼承。

var obj = {
    name: "cody",
    say: function() {
        console.log(this.name)
    }
};

var sub = Object.create(obj);
sub.name = "deepred";
sub.say(); // deepred

Object.create的原理是:

Object.create = Object.create || function(obj) {
    var F = function() {};
    F.prototype = obj;

    return new F();
}
ES6的class語法

ES6引入了class語法,讓JS看起來更像是面向?qū)ο蟮恼Z言,但這僅僅是語法糖而已,背后仍然是基于原型的繼承方式。

class Animal {
    constructor(name) {
        this.name = name;
    }
    sayName() {
        console.log(this.name)
    }
}

class Duck extends Animal {
    constructor(name, color) {
        super(name);
        this.color = color;
    }

    sayColor() {
        console.log(this.color);
    }

    sayName() {
        // 調(diào)用父級同名方法
        super.sayName();
        console.log("duck sayname")
    }
}
var duck = new Duck("duck", "red");
duck.sayColor();
duck.sayName();

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

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

相關(guān)文章

  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你對象”還好嗎?

    摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍(lán)圖或原型。在中,對象通過對類的實(shí)體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實(shí)例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    李昌杰 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你對象”還好嗎?

    摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍(lán)圖或原型。在中,對象通過對類的實(shí)體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實(shí)例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    Lyux 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你對象”還好嗎?

    摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍(lán)圖或原型。在中,對象通過對類的實(shí)體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實(shí)例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

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

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

    novo 評論0 收藏0
  • javascript 面向對象版塊之理解對象

    摘要:用代碼可以這樣描述安全到達(dá)國外面向過程既然說了面向?qū)ο螅敲磁c之對應(yīng)的就是面向過程。小結(jié)在這篇文章中,介紹了什么是面向?qū)ο蠛兔嫦蜻^程,以及中對象的含義。 這是 javascript 面向?qū)ο蟀鎵K的第一篇文章,主要講解對面向?qū)ο笏枷氲囊粋€理解。先說說什么是對象,其實(shí)這個還真的不好說。我們可以把自己當(dāng)成一個對象,或者過年的時候相親,找對象,那么你未來的老婆也是一個對象。我們就要一些屬性,比...

    lovXin 評論0 收藏0
  • javascript面向對象之“多態(tài)”

    摘要:之前,本質(zhì)上不能算是一門面向?qū)ο蟮木幊陶Z言,因?yàn)樗鼘τ诜庋b繼承多態(tài)這些面向?qū)ο笳Z言的特點(diǎn)并沒有在語言層面上提供原生的支持。所以在中出現(xiàn)了等關(guān)鍵字,解決了面向?qū)ο笾谐霈F(xiàn)了問題。 ES6之前,javascript本質(zhì)上不能算是一門面向?qū)ο蟮木幊陶Z言,因?yàn)樗鼘τ诜庋b、繼承、多態(tài)這些面向?qū)ο笳Z言的特點(diǎn)并沒有在語言層面上提供原生的支持。但是,它引入了原型(prototype)的概念,可以讓我們以...

    JerryWangSAP 評論0 收藏0

發(fā)表評論

0條評論

Charlie_Jade

|高級講師

TA的文章

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