想要做一个对象封装,对象a有n个方法,对象b没有方法,但使用对象b的时候会自动调用a的方法。
代码形式类似:
var a = {
aaa:function(){},
bbb:function(){}
}
var b = {
bbb:function(){}
}
/*
此处写出处理代码,
请不要改变其他结构,
谢谢。
*/
b.bbb() //此处执行b.bbb()方法。
b.aaa() //此处不报错,并调用了a的aaa()方法。
(说明:b.aaa()执行结果全等于a.aaa())
让b执行任何方法的时候都先看看自己有没有,如果没有再去找a下面的方法。
请问,中间怎么写才能到达预期效果?
可以用
b.__proto__ = a;
也可以像下面这样这里面,你把你原来的a理解成a.prototype就行了.
最后,还可以这么写
建议你看下这个问题
网易web前端校招面试题的问题?
http://segmentfault.com/q/1010000003758203
原理是相似的
加上一句:
b.prototype = a;
即可通过in来做判断属性是否存在
in
判断包括来自实例和原型hasOwnProperty
只判断是否存在在实例上让对象b 继承 对象a,b 就可以访问方法
aaa()
了可以通过让 b 的原型对象为a来实现,但是
prototype
是函数可以直接访问的,对象没有这个属性,Firefox、Safari和Chrome在每个对象上都支持一个属性__proto__
,用于指向对象的原型对象,IE 9+也支持这个属性,所以这行应该填biubiubiu~~ 看这里
知识点:
原型,原型继承
Object.create()
解决方法:
兼容:
好像挺简单,but~有些浏览器不兼容,所以猛戳下面
Object.create()兼容写法:http://segmentfault.com/q/1010000002919613
自己补充下知识点就看懂了。。done!!