如何从类中的函数调用类方法?我的代码是:
var myExtension = {
init: function() {
// Call onPageLoad
},
onPageLoad: function() {
// Do something
},
}
我试过...
onPageLoad();
... 在 init 方法中,但它说它未定义。
我在 google 上运气不太好,因为我不明白所使用的语法。我在网上找到的所有 JS OOP 示例都是不同的格式。我正在使用 Mozilla 用于扩展开发的格式。
最佳答案
调用当前方法的对象可通过特殊变量this
获得。任何时候您在对象上调用方法时,this
都会在方法内引用该对象。
var myExtension = {
init: function() {
this.onPageLoad();
},
onPageLoad: function() {
// Do something
},
};
this
始终引用调用对象,而不是定义函数的对象或作为其属性的对象。
value = 'global';
var ob0 = {
value: 'foo',
val: function() {
return this.value;
},
},
ob1 = {value: 'bar'},
ob2 = {value: 'baz'};
ob0.val(); // 'foo'
ob1.val = ob0.foo;
ob1.val(); // 'bar'
ob0.val.call(ob2); // 'baz'
var val = ob0.val;
val(); // 'global'
在最后一种情况下,val
作为自由函数执行(未绑定(bind)到对象的函数,即不是方法),在这种情况下 this
在 val
的执行过程中获取全局对象(在网络浏览器中为 window
)的值。全局变量实际上是全局对象的属性,因此 val()
返回 'global'
(名为 value
的全局变量的值)。由于全局变量实际上是全局对象的属性,因此您可以将自由函数视为实际上是全局对象的方法。从这个 Angular 来看,最后两行(在全局范围内执行时)等同于:
window.val = ob0.val;
window.val();
这种观点并不完全符合作用域的实际情况,尽管您只会注意到函数内部的差异。在函数中,window.val = ...
将创建一个全局变量,而 var val
则不会。
value = 'global';
var ob0 = {
value: 'foo',
val: function() {
return this.value;
},
};
function lcl() {
var val = ob0.val; // doesn't set a global named `val`
return val(); // 'global'
}
lcl(); // 'global'
val(); // error; nothing named 'val'
function glbl() {
window.val = ob0.val; // sets a global named `val`
return window.val(); // 'global'
}
glbl(); // 'global'
val(); // 'global'
有关 call
的更多信息,请参阅 MDN 的引用页面上面用的方法。有关 this
变量的更多信息,请参阅“JavaScript “this” keyword”和“How does “this” keyword work within a JavaScript object literal?”
关于javascript - 哎呀。从方法内部调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8130293/