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....'
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
console.info(Object.getPrototypeOf(target))--->輸出以下:對象
未完待續...繼承