如何设置 var self = this;从函数外部
How to set var self = this; from outside the function?
我有一个类似类的函数
var myapp = function() {
this.method = function() {
//Do something...
}
}
若要从方法内部引用myapp
,myapp
函数中的第一行是
var self = this;
因此,myapp
中的方法可以安全地引用"类"
this.anothermethod = function() {
self.method();
}
完整代码:
var myapp = function() {
var self = this;
this.dosomething = function(Callback) {
Callback();
}
this.anothermethod = function() {
//Pass a callback ("self" is required here)...
this.dosomething(function() {
self.complete();
)};
}
this.complete = function() {
console.log('All done!');
}
}
我的问题是:我可以从myapp
声明之外分配var self = this;
吗?我不想每次写"类"时都设置self
。
有点像这样:
var library = function() {
this.loadclass = function(Name) {
var tempclass = window[Name];
library[Name] = new tempclass();
library[Name].self = library[Name];
}
}
var myapp = new library();
myapp.loadclass('myapp');
myapp.myapp.dosomething();
它无法按预期工作。 出于某种原因,self
等于window
。
我知道这有点不正常的编程,但能做到吗?
关于使用self
的注意事项:我记得我为什么开始使用它。我想从方法内部的回调中引用基类(this
)。一旦您尝试在方法的函数中使用this
,它就会引用该方法,而不是基类。
除非将方法与对象分离并将它们作为普通函数调用,否则根本不需要self
变量。该方法可以使用 this
关键字访问其对象:
var myapp = function() {
this.method = function() {
//Do something...
}
this.anothermethod = function() {
this.method();
}
}
不,你真的不能;至少不是你创建对象的方式。
您可以通过枚举对象上的所有函数并将它们绑定到对象本身来执行此操作。像这样:
Object.keys(obj)
.filter(function(n) { return typeof obj[n] == "function" })
.forEach(function(n) { obj[n] = obj[n].bind(obj) })
这个函数将检查obj
的公共、可枚举的属性,并确保它上面的任何函数都绑定到obj
;即 this
现在注定要obj
.
this
入门
调用 new 时,构造函数中的this
将绑定到新创建的对象。如果确实需要对this
的引用,因为它在构造函数时被绑定,则确实需要保留对它的引用。
JavaScript 中的函数绑定到调用它的任何位置。下面是一个示例:
var foo = new function() {
this.bar = function() {
return 'bar'
}
this.baz = function() {
return this.bar()
}
}
console.log(foo.bar()) // bar
console.log(foo.baz()) // bar
var bar = function() {
return "window"
}
var baz = foo.baz
console.log(baz()) // window
当我们调用foo.baz()
时,它会寻找foo
来实现bar
,但是当通过"分离"引用调用foo.baz
时,它会查找全局对象是什么(在本例中为浏览器窗口对象)并从那里调用bar
。因为我们在全局上下文中定义了bar
,所以它随后返回window
。
赋值一个名为 self
的变量的做法是,如何调用方法并不重要,因为您始终在创建时通过 self
变量引用this
。你不必这样写东西,但你应该明白,对this
的引用可能会在你的脚下改变。
- 调整窗口大小时,可拖动的对象会出现在容器外部
- HTML表单提交时未执行外部函数
- $(this).prop('property') vs. this.property
- 通过在Dojo mobile ViewController.openExternalView中动态更改打开同一外部视图的
- 使用html中的外部javascript进行数据验证
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- 将变量传递给外部Javascript
- TypeScript:在对象文字字段中的访问器中访问外部“this”
- 如何将 THIS 绑定到 PHP 中的外部函数
- 在 jQuery 中从父元素外部单击“this”时如何切换子元素
- 如何设置 var self = this;从函数外部
- Meteor.js 1.0:如何使用this._id返回 ObjectId 外部的_id
- 如何在不缓存外部的情况下将“this”传递到承诺中
- 如何仅替换一些“this”外部函数
- 为什么$(this)选择器在我的函数内部工作,而在外部工作
- 如何调用外部"this"在内部函数中
- 使用browserify请求外部库时出错(this = undefined)
- 在JavaScript中,如何得到'this'外部对象的对象的方法,该对象是外部对象中数组的元素
- 最简单的是什么?从javascript内部回调中访问外部this的最短方式
- 如何从jQuery函数访问外部this