有没有办法在JavaScript中使用以下内容?
function a (){
return{
x: function foo(){
......
}
y: function bar(){
.......
.......
foo() //Doesn't work
.....
}
}
}
有没有办法在函数bar()中引用foo(),这两个都恰好在同一个返回块中?
答案 0 :(得分:1)
如果 bar
将始终/仅作为表达式的一部分进行调用,在对象上查找或以任何其他方式确保{{1}在调用期间引用对象,例如:
this
或
theObject.y(); // Since you've called the property `y`
然后您可以使用var b = theObject.y.bind(theObject);
b();
中的this.x()
来运行bar
(因为您已使用foo
而不是x
作为自己的名称) :
foo

当你这样做时,function a() {
return {
x: function foo(){
console.log("I'm foo");
},
y: function bar(){
console.log("I'm bar, calling foo");
this.x();
}
};
}
var obj = a();
obj.y();
也将引用this
中的对象,如果你需要引用其他对象属性,这将很方便。
如果foo
可能以不同的方式调用,那么您可能希望单独定义函数,然后将它们组合在一个对象中:
bar
示例:
function a() {
function foo(){
// ......
}
function bar(){
// .......
// .......
foo();
// .....
}
return { x: foo, y: bar };
}

以这种方式调用function a() {
function foo(){
console.log("I'm foo");
}
function bar(){
console.log("I'm bar, about to call foo");
foo();
}
return { x: foo, y: bar };
}
var obj = a();
obj.y();
时,foo
将是this
(在严格模式下)或对全局对象的引用(在松散模式下),而不是对象的引用;如果您需要对该对象的引用,则有多种方法可以执行此操作,例如将其分配给undefined
和foo
都关闭的变量。