js對象原型、原型鏈


title: js對象原型、原型鏈
date: 2016-11-24 18:54:08
tags: javascript
categories:

  • javascript

設置對象原型

Object.creat

Object.create() 方法創建一個擁有指定原型和若干個指定屬性的對象。

Object.create(proto, [ propertiesObject ])
  • 參數
    • proto
      • 一個對象,作為新創建對象的原型。
    • propertiesObject
      • 可選。該參數對象是一組屬性與值,該對象的屬性名稱將是新創建的對象的屬性名稱,值是屬性描述符(這些屬性描述符的結構與Object.defineProperties()的第二個參數一樣)。注意:該參數對象不能是 undefined,另外只有該對象中自身擁有的可枚舉的屬性才有效,也就是說該對象的原型鏈上屬性是無效的。
  • 拋出異常
    • 如果 proto 參數不是 null 或一個對象值,則拋出一個 TypeError 異常。
  //定義原型對象
var landRover = {
    name: 'landRover',
    start:function(){
        console.log('%s start',this.logo)
    },
    run:function(){
        console.log('%s running',this.logo)
    },
    stop:function(){
        console.log('%s stop',this.logo)
    }
}

  //使用原型構造新的對象
var landWind = Object.create(landRover);
landWind.logo = "landWind";

var landCruiser = Object.create(landRover);
landCruiser.logo = "landCruiser";

構造函數

  • 構造函數使用prototype設置原型
  • 使用new關鍵字創建對象
Car的構造函數
function Car(logo){
    this.log = logo || 'unknow name';
}

//設置Car的prototype屬性
Car.prototype = {
    start:function(){
        console.log('%s start',this.logo)
    },
    run:function(){
        console.log('%s running',this.logo)
    },
    stop:function(){
        console.log('%s stop',this.logo)
    }
}

//創建對象
var landWind = new Car('landWind');
var landRover = new Car('landRover');

原型鏈

//Car的構造函數
function Car(logo){
    this.log = logo || 'unknow name';
}

//設置Car的prototype屬性
Car.prototype = {
    start:function(){
        console.log('%s start',this.logo)
    },
    run:function(){
        console.log('%s running',this.logo)
    },
    stop:function(){
        console.log('%s stop',this.logo)
    }
}

// landRover構造函數
function LandRover(serialno){
    this.serialNumber = serialno
}

// 設置LandRover的prototype屬性
LandRover.prototype = new Car('landRover');

landRover1 = new landRover(10001)

landRover1的原型指向Car的實例,這個實例的原型指向Car的prototype,Car.prototype的原型又指向Object.prototype,這一系列構建了一條原型鏈

而構造函數LandRover和Car作為函數對象,其對象原型(proto)指向Function.prototype,Function.prototype指向Object.prototype

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容