Object 提供的對象建立方式

Object解讀this

Object中的create方法的第一個參數是待建立對象的原型對象,第二個參數是待建立對象的屬性定義。
**屬性定義解讀以下:**
其中第二個參數是可選的,若是被指定了且不是undefined類型,
一個對象的可枚舉的自身的屬性(並不是原型鏈上的可枚舉屬性)
指定的屬性描述符將會被添加到新建立的對象,和指定的屬性名稱同樣,
這個參數的形式和使用Object.defineProperties()方法的的第二個參數是一致的。
返回值: 一個以第一個參數爲原型對象且含有第二個參數指定的屬性的新建立的對象
異常:當第二個參數不是空或者或者是一個普通對象;

示例spa

//shape -super class
function Shape(){
  this.x=0;
  this.y=0;
};
//super class method
Shape.prototype.move=function(x,y){
    this.x+=x;
    this.y+=y;
    console.info('shape moved....');
};

//Rectangle -sub class
function Rectangle(){
   Shape.call(this);//使用對象冒充實現繼承
};

//sub class extends super class
Rectangle.prototype = Object.create(Shape.prototype);
Rectangle.prototype.constructor = Rectangle;

var rect = new Rectangle();

console.log('Is rect an instance of Rectangle?',rect instanceof Rectangle); //will output true
console.log('Is rect an instance of Shape?',rect instanceof Shape);// will output true
rect.move(1,1);// will output 'shape moved....'

clipboard.png


Object.create的使用範例:prototype

//原型對象
var proto  =  {
    init:function(){
       console.info('init method...');
    },
    service:function(){
       console.info('service method');
    },
    destroy:function(){
       console.info('destroy method..');
    }
 
 }
 //目標對象
 var target = Object.create(proto,{
     k_init:{
        value:function(){
            console.info('k_init method...');
        }
     },
     k_service:{
        value:function(){
            console.info('k_service method...');
        }
     },
     k_destroy:{
        value:function(){
            console.info('k_destroy method...');
        }
     }
});

console.info(target)--->輸入以下:code

clipboard.png

console.info(Object.getPrototypeOf(target))--->輸出以下:對象

clipboard.png

未完待續...繼承

相關文章
相關標籤/搜索