JavaScript原型鏈屬性查詢規則

2020-10-07 11:00:36

原型鏈

在這裡插入圖片描述

    // 屬性查詢規則
    function Student(name, age, sex) {
      this.name = name;
      this.age = age;
      this.sex = sex;
    } 
    Student.prototype.sayHi = function () {
      console.log('大家好,我是' + this.name);
    }
    // 建構函式的原型物件增加一個屬性
    Student.prototype.test = 'abc';
    var s1 = new Student('lilei', 18, '男');
    var s2 = new Student('hmm', 18, '女');


    // 如何存取物件的方法
    // s1物件的原型物件的原型物件  Object建構函式的原型物件
    // console.log(s1.__proto__.__proto__ === Object.prototype);
    // 
    // 所有的物件都有toString()方法
    // 查詢toString()    根據物件的查詢原則所有的物件都可以查詢到Obect 上的所有成員
    // console.log(s1.toString());
    // console.dir(s1);
    // console.dir(s1.__proto__);
    // console.dir(s1.__proto__.__proto__);


    // 如何存取物件的屬性
    // 讀取屬性  先在物件本身查詢test屬性,如果沒有找到的話,會去原型鏈上查詢
    // console.log(s1.name);
    // console.log(s1.test);

    // 設定屬性
    s1.name = 'xxx';
    // test屬性在原型物件上,而在設定屬性的值的時候,不會搜尋原型鏈
    // 而是直接給物件新增一個test屬性
    s1.test = '123xxx';

    console.log(s1.name);
    console.log(s1.test);

    console.log(s2.name);
    console.log(s2.test);