Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是";这";除了变量定义之外,javascript中还需要_Javascript_This_Scope_Javascript Objects - Fatal编程技术网

是";这";除了变量定义之外,javascript中还需要

是";这";除了变量定义之外,javascript中还需要,javascript,this,scope,javascript-objects,Javascript,This,Scope,Javascript Objects,我的问题非常简单 我只是偶然发现,一旦你用this.定义了一个属性到一个对象中,当你想调用它们时,你就不需要在this.前面加上前缀了 所以这个。实际上是用来定义时间的,比如var 我发现它是我自己不久后,我引用了这个窗口对象。因为我没有使用new调用我的对象,所以它就像一个函数 一个额外的问题,也许是评论。在主对象内部,如果我创建一个新对象,并在对象定义期间使用this,thisthis将引用什么 所以这个。是否真的要在广告定义时使用,如var 否,此的要点是当前的执行范围。如果不使用此,您可

我的问题非常简单

我只是偶然发现,一旦你用
this.
定义了一个属性到一个对象中,当你想调用它们时,你就不需要在
this.
前面加上前缀了

所以
这个。
实际上是用来定义时间的,比如
var

我发现它是我自己不久后,我引用了这个窗口对象。因为我没有使用new调用我的对象,所以它就像一个函数

一个额外的问题,也许是评论。在主对象内部,如果我创建一个新对象,并在对象定义期间使用
this
,this
this
将引用什么

所以这个。是否真的要在广告定义时使用,如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
}