我的问题很简单。
我只是随便发现,一旦你将一个带有this.
的属性定义到一个对象中,当你想要调用它们时,你不需要再添加this.
。
所以this.
真的要用于广告定义时间,例如var
吗?
谢谢!
更新: 不久后我发现它是我的自我,我用这个引用了窗口对象。因为我在不使用new的情况下调用了我的对象,所以就像它是一个函数一样。
感谢大家!
更新2:
另外一个问题,也许是评论。在主对象内部,如果我创建一个新对象,并在对象定义期间使用this
,那么this
将引用什么?
答案 0 :(得分:2)
在各种情况下,您必须使用this
才能引用正确的数据。
这两个实现做了很多不同的事情:
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);
您必须使用this
来控制如果要修改当前对象会发生什么。您可以将其关闭并且仍然会修改当前对象属性的假设是不正确的。如果你把它关掉,你就是修改全局变量,而不是成员属性。
答案 1 :(得分:1)
所以这个。真的意味着要用广告定义时间,比如var?
不,this
的要点是当前的执行范围。如果不使用this
,您可以(并且将会)遇到奇怪的错误。例如,假设您是一个具有属性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.
}
答案 2 :(得分:1)
请参阅http://jsfiddle.net/BRsqH/:
function f(){
this.public='hello!';
var hidden='TOP SECRET!';
}
var instance=new f();
alert('Public data: '+instance.public+ /* gives "hello!" */
'\nHidden data: '+instance.hidden /* gives undefined */
);
使用var
创建的变量是隐藏的,在创建它们的函数之外无法查看或修改。
但使用this
创建的变量是公共的,因此您可以在函数外部访问它们。
答案 3 :(得分:1)
不,除非this
的上下文是全局对象,例如window
。请看以下示例:
function Foo(bar) {
this.data = bar;
console.log(this.data); // OK
console.log(data); // ReferenceError
}
在此示例中,您将在第一个ReferenceError: data is not defined
上获得console.log(data)
,除非,data
是全局变量。要访问该实例的公共成员,您有使用this.data
。
答案 4 :(得分:0)
我想我明白了。
我将对象定义为function My_Object(){...}
,然后使用MyObject()
调用它。这样,My_Object被视为一个函数,而不是一个对象,因此这个==窗口。
所以最后我将属性和方法附加到窗口而不是My_Object!这种方式可以在没有预先.this
的情况下使用。
将My_Object初始化为对象的正确方法是将其称为new My_Object
,不对吗?