场景:
现有一个对象, 通过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
真正面向对象的来的方便和易于理解呀!!!
var me=this
function subfoo(){
...
me.foo()
}
试试