手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >JavaScript不使用prototype和new实现继承机制
JavaScript不使用prototype和new实现继承机制
摘要:此方法并非笔者原创,笔者只是在前辈的基础上,加以总结,得出一种简洁实用的JavaScript继承方法。传统的JavaScript继承基于pr...

此方法并非笔者原创,笔者只是在前辈的基础上,加以总结,得出一种简洁实用的JavaScript继承方法。

传统的JavaScript继承基于prototype原型链,并且需要使用大量的new操作,代码不够简洁,可读性也不是很强,貌似还容易受到原型链污染。

笔者总结的继承方式,简洁明了,虽然不是最好的方式,但希望能给读者带来启发。

好了,废话不多说,直接看代码,注释详尽,一看就懂~~~

复制代码 代码如下:

/**

* 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]);

}

}

};

/**

* 创建子类

* @param ext obj,包含需要重写或扩展的方法。

* @returns Object

*/

Object.prototype.extend = function(ext){

var child = this.clone();

ext.each(function(key, value){

child[key] = value;

});

return child;

};

/**

* 创建对象(实例)

* @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!");

}

});

/**

* 创建鸟类实例

* @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和new实现继承机制】相关文章:

JavaScript中的bold()方法使用详解

基于JavaScript实现智能右键菜单

Javascript实现div的toggle效果实例分析

浅谈Javascript线程及定时机制

浅析JavaScript中的事件机制

JavaScript中操作字符串小结

JavaScript实现鼠标拖动效果的方法

关于JavaScript作用域你想知道的一切

JavaScript操作Cookie方法实例分析

JavaScript中reduce()方法的使用详解

精品推荐
分类导航