时间:2021-05-26
此方法并非笔者原创,笔者只是在前辈的基础上,加以总结,得出一种简洁实用的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!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
目前javascript的实现继承方式并不是通过“extend”关键字来实现的,而是通过constructorfunction和prototype属性来实现继承
学完了Javascript类和对象的创建之后,现在总结一下Javascript继承机制的实现。Javascript并不像Java那样对继承机制有严格明确的定义,
一、在prototype上保存方法不使用prototype进行JavaScript的编码是完全可行的,例如:functionUser(name,password
我们已经在第一章中使用prototype属性模拟类和继承的实现。prototype属性本质上还是一个JavaScript对象。并且每个函数都有一个默认的prot
1、prototype在JavaScript中并没有类的概念,但JavaScript中的确可以实现重载,多态,继承。这些实现其实方法都可以用JavaScript