// module
const obj = {
geo: {}
}
const func = function(){}
func.__proto__.setGeo = function({lon, lat} = {}){
return this.obj.geo = {lon, lat};
}
const parentObject = {
func,
obj
}
module.exports = parentObject
// controller
const parentObject = require('./module')
parentObject.func.setGeo({lon: 1, lat: 2})
显然这是行不通的,因为setGeo中的this
指向func
。
答案 0 :(得分:0)
您的问题可以简化为想要访问该函数的父对象的情况。
o = {
f: function() {console.log(this)},
g: 1
}
现在,this
关键字将始终指向调用上下文。但是,调用上下文在不同情况下可能会有所不同。
普通函数调用。
o.f();
在这种情况下,调用上下文是o
对象-您正在尝试访问的对象。
在特定上下文中调用函数
o.f.call({name: 'new context'})
在这种情况下,调用上下文为{name: 'new context'}
将函数用作构造函数
obj = new o.f()
在这种情况下,调用上下文是您创建的全新对象
现在,最重要,如果对象o
是另一个对象o1
的原型,则通过o1
调用上述方法将产生相同的结果。
这是三种情况。注意控制台。
o = {
f: function() {console.log(this)},
g: 1
}
o.f();
o.f.call({name: 'new context'})
obj = new o.f()
o1 = Object.create(o);
o1.f();
答案 1 :(得分:0)
您必须将obj
继承到parentObject
中,而不是直接在obj
中使用func
。然后,您在proto上的setGeo
将使用此实例访问obj
。检查以下更改。
// module
const obj = {
geo: {}
}
const func = function(){}
func.__proto__.obj = obj; // Inheriting parent
func.__proto__.setGeo = function({lon, lat} = {}){
return this.obj.geo = {lon, lat};
}
const parentObject = {
func
}
module.exports = parentObject
// controller
const parentObject = require('./module')
parentObject.func.setGeo({lon: 1, lat: 2})