javascript - 对象和方法的耦合关系
黄舟
黄舟 2017-04-10 15:04:17
[JavaScript讨论组]

在JavaScript高级程序设计中第五章引用类5.5.5节,118页,使用call()来扩充作用域的最大好处,就是对象不需要与方法有任何耦合关系。这其中对象和方法的耦合关系怎么理解啊?求大神帮忙解答。

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(1)
黄舟

假设现在有个对象a = {name: 'isayme'}, 如果想提供一个接口打印name属性, 怎么做?

方法1, 给对象定义一个函数(当然也可以用原型链, 此处仅简单化):

a = {name: 'isayme'};

a.print = function() {
    console.log('NAME: ' + this.name);
}

a.print();    // NAME: isayme

方法2, 打印的函数不再作为a的属性, 而是单独定义:

a = {name: 'isayme'};

print = function() {
    console.log('NAME: ' + this.name);
}

// 注意此处调用方式与方法1的不同
print.call(a);    // NAME: isayme

比较两个方法, 方法2中打印函数print与对象a完全无关(两者无依赖关系), 即低耦合; 方法1中的print是对象a的属性, 两者有明显的依赖关系, 即高耦合.

注: 低耦合/高耦合相对的概念~

低耦合有什么优点呢?
假如又有一个对象b = {name: 'heaven'}也想打印他的name, 怎么办?
如果是方法1, 那么b只好自己也加一个print属性. 但这样就相当于每个对象都会有自己独立的print函数, 重复的代码会加重后期维护困难;
如果是方法2, b只要这样print.call(b)就可以了! 是不是很简单!

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

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