是";这";除了变量定义之外,javascript中还需要
我的问题非常简单 我只是偶然发现,一旦你用是";这";除了变量定义之外,javascript中还需要,javascript,this,scope,javascript-objects,Javascript,This,Scope,Javascript Objects,我的问题非常简单 我只是偶然发现,一旦你用this.定义了一个属性到一个对象中,当你想调用它们时,你就不需要在this.前面加上前缀了 所以这个。实际上是用来定义时间的,比如var 我发现它是我自己不久后,我引用了这个窗口对象。因为我没有使用new调用我的对象,所以它就像一个函数 一个额外的问题,也许是评论。在主对象内部,如果我创建一个新对象,并在对象定义期间使用this,thisthis将引用什么 所以这个。是否真的要在广告定义时使用,如var 否,此的要点是当前的执行范围。如果不使用此,您可
this.
定义了一个属性到一个对象中,当你想调用它们时,你就不需要在this.
前面加上前缀了
所以这个。
实际上是用来定义时间的,比如var
我发现它是我自己不久后,我引用了这个窗口对象。因为我没有使用new调用我的对象,所以它就像一个函数
一个额外的问题,也许是评论。在主对象内部,如果我创建一个新对象,并在对象定义期间使用this
,thisthis
将引用什么
所以这个。是否真的要在广告定义时使用,如var
否,此
的要点是当前的执行范围。如果不使用此
,您可能(也将)遇到奇怪的错误。例如,假设您是一个具有属性val
的对象,然后在该对象的原型上
App.obj = function(){
this.val = 'initial';
}
obj.prototype.myMethod = function(val) {
// how would you assign argument val to object val?
}
还请注意,您的推理与方法不同
obj.prototype.meth2 = function(){
myMethod(); // fails where this.myMethod() would work.
}
在各种情况下,您必须使用
此
,以引用正确的数据
这两种实现做了非常不同的事情:
Array.prototype.truncate(newLen) {
// sets the length property on the current Array object
this.length = newLen;
}
Array.prototype.truncate(newLen) {
// sets a global variable named length
length = newLen;
}
var arr = [1,2,3,4,5,6,7];
arr.truncate(2);
如果要修改当前对象,必须使用此
,以控制发生的情况。您可以不使用它,但它仍将修改当前对象的属性的假设是不正确的。如果您不使用它,那么您是在修改全局变量,而不是成员属性。我想我明白了
我将我的对象定义为函数my_object(){…}
,然后用MyObject()
调用它。这样,My_对象被视为一个函数,而不是一个对象,因此这个==窗口
所以最后我将属性和方法附加到窗口,而不是我的_对象!这就是无需预先添加即可使用的方法。此
将My_对象初始化为对象的正确方法是像这样调用它。新建My_对象
,对吗?请参见:
使用var
创建的变量是隐藏的,不能在创建它们的函数之外查看或修改
但是使用此
创建的变量是公共的,因此您可以在函数外部访问它们。否,除非此
的上下文是全局对象,例如窗口
。以以下为例:
function Foo(bar) {
this.data = bar;
console.log(this.data); // OK
console.log(data); // ReferenceError
}
在本例中,您将得到一个ReferenceError:data未在第一个console.log(data)
上定义,除非,data
是一个全局变量。要访问实例的公共成员,必须使用this.data
参考资料:
简短的回答是“不”。然而,我对这个的了解还不足以给你完整的答案,所以我将把这个留给其他人。准备好学习大量有用的新功能!你能举个例子吗?您所描述的内容不正确(除非这是window对象,即使这样,您的描述也只是部分正确)。您现在似乎明白了。请注意,即使这是window,您可能仍需要这样说。someVariable如果有一个局部someVariable隐藏着全局someVariable。
function Foo(bar) {
this.data = bar;
console.log(this.data); // OK
console.log(data); // ReferenceError
}