【发布时间】:2014-12-09 07:42:04
【问题描述】:
我正在尝试学习一些关于 javascript 的新概念。这是我编写的一个简单代码。在函数内部,这个关键字指的是全局对象,它是窗口,除非它与另一个对象的上下文绑定。在myobj 对象内部,有两个方法与另外两个可全局访问的函数共享相同的名称,分别称为afunc 和anotherfunc。我想在 myobj 上下文中访问这些全局函数,当然不使用将全局对象绑定到我曾经调用它们的立即调用函数。但它抛出了一个错误。 我的问题是,如果 javascript 中的所有内容都是一个对象,而 window 对象包含它们,那么为什么我可以使用 this.afucn 或 window.afunc 访问这些函数?
(function(){
var afunc=function (){
document.write('this is world'+'</br>');
}
var anotherfunc=function (){
document.write('this is another world');
}
var myobj={
afunc:function(){
document.write('afunc');
},
anotherfunc:function(){
document.write('anotherfunc');
},
context:function(){
(function(){
this.afunc();
this.anotherfunc();
})();
}
};
myobj.context();
})();
【问题讨论】:
-
据我所知,JS 中的一切都是对象而不是函数。
-
javascript 中的一切都不是函数,但几乎一切都是对象。基元被包裹在一个临时对象中。您将
myobj包装在 IIFE 中,这使得window对象无法访问它。 -
并非 JavaScript 中的所有内容都是函数,也并非 JavaScript 中的所有内容都是对象。
-
几乎一切都是对象。
-
它们不是全局的,它们是本地你在整个代码周围的函数。把它们移到外面就可以了。
标签: javascript scope this window-object