function test() {
var name = 'tom';
var obj = {
name: 'jack',
nick: 'halun',
frind: this.name+" "+this.nick,
print: function (){
console.log(this.name);
}
}
console.log(obj.frind);
obj.print();
}
test();
在给 obj 赋值时,node 环境下无法访问到 this.namevv
请问这是什么原因
如果在浏览器环境下:

console.log(obj.frind);
这句想打印obj对象的frind属性,但是frind: this.name+" "+this.nick,
这里的this指向哪个对象呢?这里需要注意的是:obj是字面量对象,它是没有this变量的,那么这个this应该是指向全局对象window,但是window对象下没有name和,window下有一个默认的name属性,但值为空字符串,而无nick属性,所以这时会打印:注意undefined前面有个空格对应的是this.name。
node全局环境下应该是没有name和nick属性的,那么会打印两个undefined:

PS:关于this,调用obj.print()时,相当于调用了一个函数,函数被调用时都会自动获得两个特殊变量:this和arguments。this对象是在运行时基于函数的执行环境绑定的,在全局环境下,this指向全局对象(浏览器中是Window对象),而当函数被作为某个对象的方法调用时,this就指向这个对象(参考《JavaScript高级程序设计》第7章函数表达式 第182页)。
再啰嗦两句:我觉得this最好只在对象的方法中出现,这样它被哪个对象调用,this就指向哪个对象,否则this就会指向全局对象。