【发布时间】:2017-09-29 01:10:10
【问题描述】:
我有一个值,它可能是一个原语或一个函数,或者是一个递归地包含原语/函数/对象的对象。
给定一个theThis 参数,我如何将可能在我的值内的所有函数深度绑定到theThis?
我尝试了类似的方法:
function deepBind(o, ths) {
Object.getOwnPropertyNames(o).forEach(key => {
const desc=Object.getOwnPropertyDescriptor(o, key);
if (typeof desc === "function") Object.defineProperty(o, key, key.bind(ths));
if (Object.getOwnPropertyNames(key).length>0) deepBind(o.key, ths);
});
}
但是失败了:(
我查看了一些解决方案,例如 https://github.com/jonschlinkert/deep-bind/blob/master/index.js,但这不是独立的。
我正在寻找一个独立的deepBind(val, theThis) 解决方案。
我需要解决方案来涵盖 getter 和 setter。
谢谢!
【问题讨论】:
-
I looked at some solutions and made some failed attempts but no luck ...比如? -
“或递归包含原语/函数/对象的对象”“递归”是什么意思?
-
添加我的尝试
-
guest271314 - 我的意思是 val 可能是一个包含另一个对象作为属性的对象,其中包含一个函数作为属性
-
指出您的代码有什么问题,
key是一个字符串...您多次使用它,就好像它是您想要的属性一样(您应该经常使用o[key]和 nevero.key因为它指的是o的key属性 - 但是,您发布的代码,如果您修复key的用法,您最终会得到无限递归