javascript - js 方法调用判断
天蓬老师
天蓬老师 2017-04-10 15:51:16
[JavaScript讨论组]

想要做一个对象封装,对象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下面的方法。

请问,中间怎么写才能到达预期效果?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(6)
大家讲道理

可以用b.__proto__ = a;也可以像下面这样

var a = function () {};
    a.prototype = {
        aaa: function () {
            console.log(1);
        },
        bbb: function () {
            console.log(3);
        }
    };

var b = new a();

    b.bbb = function () {
        console.log(2);
    };

    b.aaa();//1
    b.bbb();//2
    a.prototype.bbb();//3

这里面,你把你原来的a理解成a.prototype就行了.
最后,还可以这么写

var a = {
        aaa:function(){console.log(1)},
        bbb:function(){console.log(3)}
    };

var b = Object.create(a);
    b.bbb = function(){console.log(2)};

    b.aaa();//1
    b.bbb();//2
    a.bbb();//3
天蓬老师

建议你看下这个问题
网易web前端校招面试题的问题?
http://segmentfault.com/q/1010000003758203

原理是相似的

天蓬老师

加上一句:b.prototype = a;即可

PHP中文网

通过in来做判断属性是否存在

if("aaa" in b){
}else{
}

in 判断包括来自实例和原型
hasOwnProperty 只判断是否存在在实例上

怪我咯

让对象b 继承 对象a,b 就可以访问方法 aaa()
可以通过让 b 的原型对象为a来实现,但是 prototype 是函数可以直接访问的,对象没有这个属性,Firefox、Safari和Chrome在每个对象上都支持一个属性 __proto__,用于指向对象的原型对象,IE 9+也支持这个属性,所以这行应该填

b.__proto__ = a;
PHP中文网

biubiubiu~~ 看这里


知识点:

  • 原型,原型继承

  • Object.create()


解决方法:

var a = {
    aaa:function(){console.log('a,aaa');},
    bbb:function(){console.log('a,bbb');}
}
var b = Object.create(a);
b.bbb = function() {console.log('b,bbb');}
b.aaa(); //a,aaa

兼容:
好像挺简单,but~有些浏览器不兼容,所以猛戳下面
Object.create()兼容写法:http://segmentfault.com/q/1010000002919613

自己补充下知识点就看懂了。。done!!

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号