1. 程式人生 > >MINE筆記-面向物件程式設計,原型鏈的理解,建構函式,原型物件,例項化物件,prototype 運用

MINE筆記-面向物件程式設計,原型鏈的理解,建構函式,原型物件,例項化物件,prototype 運用


// to do list 建立建構函式,例項化物件,來做面向物件程式設計

// 建立建構函式--原型函式(原型物件)
function person(name,age,id){
  this.name = name;
  this.age = age;
  this.id =id
//   console.log(this)
}

// 建立例項化物件 學生jesica資訊
var jesica = new person('jesica','18','id:99')
console.log(jesica)
//輸出
//age: "18",
//id: "id:99",
//name: "jesica"

// 建立例項化對 學生ago資訊
var ago = new person('ago','15','id:88')
ago.tip = 'just a little boy'
console.log(ago)
//輸出
//age: "15",
//id: "id:88",
//name: "ago",
//tip: "just a little boy"


// 給建構函式person 加上all屬性
person.prototype.all = 'allmssge'
console.log(jesica)
//輸出
//age: "18",
//all: "allmssge",
//id: "id:99",
//name: "jesica"

console.log(ago)
//age: "15",
//all: "allmssge",
//id: "id:88",
//name: "ago",
//tip: "just a little boy"

var newman = new person('newman','10','55')
newman.laught = 'cn'
console.log(newman)

//age: "10",
//all: "allmssge",
//id: "55",
//laught: "cn",
//name: "newman"

什麼是原型鏈。說白了,其實就是有限的例項物件和原型之間組成有限鏈,就是用來實現共享屬性和繼承的。

 

建構函式有一個prototype屬性,這個屬性是一個物件(object例項),是原型物件

 

 

【小結】

套用一句很粗暴的話,所謂原型鏈就是找媽的一種行為方式,就可以理解為人是人他媽生的,妖是妖他媽生的。原型鏈的核心其實就只有一個:屬性共享和獨立的控制,當你的物件例項需要獨立的屬性,所有做法的本質都是在物件例項裡面建立屬性。若不考慮太多,你大可以在Person裡面直接定義你所需要獨立的屬性來覆蓋掉原型的屬性。總之,使用原型繼承的時候,要對於原型中的屬性要特別注意,因為他們都是牽一髮而動全身的存在。現在最常用的方法是組合模式。

1、原型鏈

    1)建構函式、原型和例項的關係

        ①建構函式都有一個屬性prototype,這個屬性是一個物件(Object的例項)

        ②原型物件prototype裡面有一個constructor屬性,該屬性指向原型物件所屬的建構函式

        ③例項物件都有一個_proto_屬性,該屬性也指向建構函式的原型物件,它是一個非標準屬性,不可以用於程式設計,它是用於瀏覽器自己使用的

    2)prototype與_proto_的關係

        ①prototype是建構函式的屬性

        ②_proto_是例項物件的屬性

                    ——這兩者都指向同一個物件

    【總結】i)函式也是物件,物件不一定是函式;

            ii)物件的本質:無序的鍵值對集合;鍵值對當中的值可以是任意資料型別的值

            iii)物件就是一個容器,這個容器當中放的是(屬性和方法)

    3)屬性搜尋

      ①在訪問物件的某個成員的時候會先在物件中找是否存在

      ②如果當前物件中沒有就在建構函式的原型物件中找

      ③如果原型物件中沒有找到就到原型物件的原型上找

      ④知道Object的原型物件的原型是null為止