传递给构造函数的Can函数可以访问构造函数的其他属性
Can functions passed into constructors have access to the constructor's other properties?
通常,调用this
可以工作;但是我在另一个上下文中调用该方法,因此this
指的是该上下文中而不是"父"对象。
代码如下:
var someConfig = {
things: [
{
attr1: 'foo',
attr2: 'bar',
action: function() {
console.log(this);
}
}
]
}
function Constructor(config) {
var self = this;
self.name = 'test';
self.things = config.things;
$.each(self.things, function(i, thing) {
thing.action();
});
}
var obj = new Constructor(someConfig);
console.log(obj);
这里有一个jsfiddle。目标是使控制台上的两个对象相同,但是this
在action
方法的上下文中返回action
所属的原始对象,而不是构造函数。
我唯一能想到的是将self
传递到action
,但我认为有更好的方法。
首先,关于代码的几点。您的配置属性是uniqueAction
,但稍后您将其称为config.action
。当您调用obj.action
时,您需要将其作为函数调用,例如:obj.action();
考虑到这一点,以下似乎可以满足您的要求…
var config = {
action: function() {
console.log(this.name);//<- IMPORTANT PART
}
}
function Constructor(config) {
var self = this;
self.name = 'test';
self.action = config.action;
}
var obj = new Constructor(config)
obj.action();
注意console.log
调用现在使用this.name
而不是self.name
。
下面是一个工作示例
我看到的唯一方法是在调用action
之前将'构造函数'附加到配置thing
上。
看看这个小提琴,它是从你的分叉。我改变了两件事:
首先,action
函数不再引用this
,而是引用this
的属性parent
。
action: function() {
console.log(this.parent);
// ^^^^^^^
}
第二,每个thing
对象接收一个引用self
的parent
属性。
$.each(self.things, function(i, thing) {
thing.parent = self;
thing.action();
});
传递给构造函数的函数可以访问构造函数的其他属性吗?
可以,但只有在将该对象传递给函数(或隐式使用this
关键字)时才可以。
您所做的尝试是从构造函数外部声明的函数访问本地self
变量,这是不可能的。
使用
{
action: function() {
console.log(this.name);
// ^^^^
}
}
当调用obj.action()
时,this
将指向实例
相关文章:
- 如何使用此从对象访问构造函数
- JavaScript 访问函数构造函数中的“this”
- 访问谷歌登录函数 Angular 2 中的构造函数参数
- 如何在运行时访问typescript类公共属性(调试)?只有构造函数和函数是可访问的
- 在OPP JS中,您可以从构造函数访问原型函数内部声明的方法
- 扩展 pixi.js在构造函数中对访问父的属性进行精灵化
- 如何在使用构造函数进行原型设计时访问实例
- 使用 JavaScript 访问构造函数之外的方法
- 如何在嵌套原型中访问 JavaScript 构造函数变量
- 如何访问构造函数变量
- 为什么使用函数构造函数创建的 Javascript 函数无法访问在其外部定义的其他函数
- 无法从 javascript 中的原型访问构造函数的值
- 访问 IIFE 中的构造函数
- 访问构造函数中的 Angular 2 输入(属性)
- 如何在es6类构造函数中访问click事件的方法
- 如何从嵌套函数访问构造函数的方法/字段
- TypeScript-NodeJS-意外的令牌'构造函数、函数、访问器或变量'
- 使用闭包创建的私有函数如何访问构造函数中定义的变量
- 可以't在分配原型后访问构造函数
- Javascript构造函数中的私有函数不可公开访问