JavaScript不使用prototype和new實現繼承機制
更新時間:2014年12月29日 11:07:58 投稿:hebedich
這篇文章主要介紹了JavaScript不使用prototype和new實現繼承機制的相關資料,需要的朋友可以參考下
此方法并非筆者原創(chuàng),筆者只是在前輩的基礎上,加以總結,得出一種簡潔實用的JavaScript繼承方法。
傳統的JavaScript繼承基于prototype原型鏈,并且需要使用大量的new操作,代碼不夠簡潔,可讀性也不是很強,貌似還容易受到原型鏈污染。
筆者總結的繼承方式,簡潔明了,雖然不是最好的方式,但希望能給讀者帶來啟發(fā)。
好了,廢話不多說,直接看代碼,注釋詳盡,一看就懂~~~
復制代碼 代碼如下:
/**
* Created by 楊元 on 14-11-11.
* 不使用prototype實現繼承
*
*/
/**
* Javascript對象復制,僅復制一層,且僅復制function屬性,不通用!
* @param obj 要復制的對象
* @returns Object
*/
Object.prototype.clone = function(){
var _s = this,
newObj = {};
_s.each(function(key, value){
if(Object.prototype.toString.call(value) === "[object Function]"){
newObj[key] = value;
}
});
return newObj;
};
/**
* 遍歷obj所有自身屬性
*
* @param callback 回調函數?;卣{時會包含兩個參數: key 屬性名,value 屬性值
*/
Object.prototype.each = function(callback){
var key = "",
_this = this;
for (key in _this){
if(Object.prototype.hasOwnProperty.call(_this, key)){
callback(key, _this[key]);
}
}
};
/**
* 創(chuàng)建子類
* @param ext obj,包含需要重寫或擴展的方法。
* @returns Object
*/
Object.prototype.extend = function(ext){
var child = this.clone();
ext.each(function(key, value){
child[key] = value;
});
return child;
};
/**
* 創(chuàng)建對象(實例)
* @param arguments 可接受任意數量參數,作為構造器參數列表
* @returns Object
*/
Object.prototype.create = function(){
var obj = this.clone();
if(obj.construct){
obj.construct.apply(obj, arguments);
}
return obj;
};
/**
* Useage Example
* 使用此種方式繼承,避免了繁瑣的prototype和new。
* 但是目前筆者寫的這段示例,只能繼承父類的function(可以理解為成員方法)。
* 如果想繼承更豐富的內容,請完善clone方法。
*
*
*/
/**
* 動物(父類)
* @type {{construct: construct, eat: eat}}
*/
var Animal = {
construct: function(name){
this.name = name;
},
eat: function(){
console.log("My name is "+this.name+". I can eat!");
}
};
/**
* 鳥(子類)
* 鳥類重寫了父類eat方法,并擴展出fly方法
* @type {子類|void}
*/
var Bird = Animal.extend({
eat: function(food){
console.log("My name is "+this.name+". I can eat "+food+"!");
},
fly: function(){
console.log("I can fly!");
}
});
/**
* 創(chuàng)建鳥類實例
* @type {Jim}
*/
var birdJim = Bird.create("Jim"),
birdTom = Bird.create("Tom");
birdJim.eat("worm"); //My name is Jim. I can eat worm!
birdJim.fly(); //I can fly!
birdTom.eat("rice"); //My name is Tom. I can eat rice!
birdTom.fly(); //I can fly!
您可能感興趣的文章:
- Javascript中 關于prototype屬性實現繼承的原理圖
- JavaScript類和繼承 prototype屬性
- js中繼承的幾種用法總結(apply,call,prototype)
- 深入了解javascript中的prototype與繼承
- javascript prototype的深度探索不是原型繼承那么簡單
- JavaScript面向對象之Prototypes和繼承
- Javascript 原型和繼承(Prototypes and Inheritance)
- JavaScript使用prototype原型實現的封裝繼承多態(tài)示例
- javascript基于prototype實現類似OOP繼承的方法
- Javascript中的prototype與繼承
- JS偽繼承prototype實現方法示例
- JavaScript使用prototype屬性實現繼承操作示例
相關文章
JS簡單獲取當前日期時間的方法(如:2017-03-29 11:41:10 星期四)
這篇文章主要介紹了JS簡單獲取當前日期時間的方法,涉及javascript針對當前日期時間的簡單運算操作,需要的朋友可以參考下2017-03-03