原型和原型鏈

大綱

  1. 對(duì)象是怎么產(chǎn)生的
  2. 什么是原型
  3. 什么是原型鏈

總結(jié):

  1. 每一個(gè)構(gòu)造方法都對(duì)應(yīng)一個(gè)原型
  2. 訪問原型的方法:
    • 構(gòu)造函數(shù).prototype
    • 對(duì)象(實(shí)例).proto
  3. 實(shí)例(構(gòu)造方法)的原型還存在原型 實(shí)例.proto.proto,最終的原型指向了Object.prototype
  4. 訪問一個(gè)實(shí)例(對(duì)象)的屬性, 從實(shí)例的內(nèi)部開始查找 實(shí)例內(nèi)部 => 實(shí)例的原型 => 原型的原型 => 上一級(jí)原型 => Object的原型
    • 若找到就返回
    • 否則返回undefined
    var obj = {};
    var obj2 = new Object();  // Object是構(gòu)造方法,專門用來創(chuàng)建對(duì)象的
    console.log(typeof Object);
    var date = new Date();   // Date也是構(gòu)造方法


    // 自定義的構(gòu)造方法
    function Student(age,name) {
        this.age = age;
        this.name = name;
    }

    var stu1 = new Student(10,'Tom');
    var stu2 = new Student(20,'孫強(qiáng)');
    var stu3 = new Student(18,'感化');
    console.log(stu1,stu2,stu3);


    // 貓類
    class Cat {
        // 構(gòu)造方法
        constructor() {
            console.log('執(zhí)行構(gòu)造方法');
            this.age = 2;
            this.name = '布偶';
        }
    }

    var cat = new Cat();
    console.log(cat);
<script>
    // 貓類
    // class Cat {
    //     // 構(gòu)造方法
    //     constructor() {
    //         this.age = 2;
    //         this.name = '布偶';
    //     }

    //     say() {
    //         console.log('貓的名字是',this.name);
    //     }

    //     aaa() {
    //         console.log('aaaa');
    //     }

    //     bbbb() {
    //         console.log('bbbb');
    //     }
    // }

    // var cat = new Cat();
    // console.log(cat);


    function Cat() {
        this.age = 2;
        this.name = '布偶';
    }

    Cat.prototype.say = function () {
        console.log(this.name);
    }

    Cat.prototype.aaa = function () {
        console.log('aaa');
    }

    Cat.prototype.bbb = function () {
        console.log('bbb');
    }

    var cat = new Cat();
    console.log('prototype',Cat.prototype);
</script>
<script>
    Object.prototype.bb = 1000;

    function Cat() {
        this.age = 2;
        this.name = '布偶';
    }

    Cat.prototype.aa = 100;

    var cat = new Cat();

    console.log(Cat.prototype === cat.__proto__); // true

    console.log(cat.__proto__.__proto__ === Object.prototype); // true


    var date = new Date();
    console.log(date.__proto__.__proto__ === Object.prototype); // true

    console.log(typeof cat.age.toString());


</script>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容