js 继承概述
2020-12-13 03:40
标签:style blog class code java c 上文讲述过js实现面向对象,一定是可以实现继承的效果的。虽然说很多的js框架都帮助我们实现了继承的功能,或者说在日常的工作和学习中我们压根就用不到js的继承,但是我们还是需要了解一下js中继承,以方便我们阅读框架中的继承是如何实现的。在下面的文章中我会给大家模拟一下js中继承的实现。 先来看一下下面创建对象的一种方式:
js 继承概述,搜素材,soscw.com js 继承概述 标签:style blog class code java c 原文地址:http://blog.csdn.net/andywuchuanlong/article/details/25685973/*
* 对象工厂
*/
function objectFactory(jsonObj){
function objectEntity(){
}
if(typeof jsonObj == "object"){
for(var index in jsonObj){
objectEntity.prototype[index] = jsonObj[index];
}
}
return objectEntity;
}
var Person = objectFactory({
pname:‘andy‘,
sex:‘man‘
});
var person = new Person();
console.info(person+"--"+Person);// [object Object] -- function objectEntity(){}
console.info(person.pname);
console.info(person.sex);
objectFactory接受的是一个json对象jsonObj作为参数,在这个函数内部创建了一个函数objectEntity,然后就判断输入的jsonObj
是否是对象类型,如果是那么就遍历这个json对象,然后把遍历出来的每个值都附加objectEntity的原型上面,请注意,下面返回的
就是objectEntity(可以参考上节中的js闭包概念),也就是说Person指向的就是objectEntity,那么Person的原型上面自然的就有了
pname,sex等属性。
如果上述能够理解的话,我们就可以进行下一步的继承的实现(类似于很多框架中的继承底层实现)/*
* 继承
*/
function inherit(obj,prop){
function f(){
}
if(typeof obj=="object"){
for(var index in obj){
f.prototype[index] = obj[index];
}
}else{
f.prototype = obj.prototype;
for(var index in prop){
f.prototype[index] = prop[index];
}
}
return f;
}
var Animal = inherit({
type:‘animal‘,
name:‘animal‘,
jump:‘jump‘
});
var Dog = inherit(Animal,{
name:‘i am a dog‘,
jump:‘dog jumpping‘
});
var dog = new Dog;
console.info(dog.type);
console.info(dog.name);
在这里就不再对inherit这个函数进行详细的解释,读者可以自行分析,在这里Dog 继承了Animal,那么Dog创建出来的对象dog自然的就有了Animal中的各个属性。