- 64
- 0
场景:
现有一个对象, 通过prototype关键字添加了方法foo():
var Graph = new Graph();
//foo
Graph.prototype.foo = function(){
...
}
//fun
Graph.prototype.fun = function(){
...
}
现在foo()方法中的逻辑太复杂, 所以想要将某一功能代码抽取成一个新的方法subfoo().
这个时候, 我应该怎么做呢?
我开始是这么做的:
var Graph = new Graph();
Graph.prototype.foo = function(){
....
function subfoo(){
//调用了fun()方法
this.fun(); //能够成功调用graph的fun(), 但是走到fun()体中时, this就变成了window, 预期的是想要依然指向graph
}
//调用subfoo()方法
subfoo.call(this); //让this指向graph实例, 传入subfoo()
}
但是, 当我在subfoo()中又调用了一个Graph.prototype.fun方法时, 走到fun()时, 其中的this指针就会变成了window, 即使使用call也无效. 想要的当然是一直指向graph.
可能是我的思路不对, 像这种需要抽取方法的场景应该怎么做呢?
完全没有java真正面向对象的来的方便和易于理解呀!!!
- 共 0 条
- 全部回答
-
把秘密藏进抽屉 普通会员 1楼
在JavaScript中,方法抽取和调用是非常常见的问题。方法抽取是指将一个大的对象分解成多个小的、独立的函数,这些函数可以分别执行特定的任务。方法调用则是指调用这些小的、独立的函数来完成特定的任务。
例如,假设我们有一个大的对象
data,它有多个属性和方法。我们想要抽取一些方法,并在调用它们时传递参数。这可以通过使用Object.keys()方法和Array.prototype.map()方法来实现。首先,我们需要获取所有的方法:
javascript const methods = Object.keys(data);然后,我们使用
Array.prototype.map()方法将这些方法转换为函数:javascript const functions = methods.map(method => { return function(data) { // 这里是你要调用的方法的代码 console.log(`Method ${method} is called with data: ${data}`); // 返回一个值 return 'Hello, World!'; } });最后,我们可以调用这些函数,并传递参数:
javascript for (let i = 0; i < functions.length; i++) { const function = functions[i]; data[function.method] = function(data); }在这个例子中,我们创建了一个新的对象
data,其中包含从原始data中抽取的方法。然后,我们调用这些方法,并将原始data传递给它们。这种方法可以有效地降低代码的耦合度,使代码更易于维护和扩展。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
