在JavaScript中使用'this'关键字和构造函数中的var有什么区别?

时间:2017-03-26 16:51:49

标签: javascript this

我正在学习JavaScript中的对象概念并且有这个疑问。这是Bin http://jsbin.com/yoyepetewa/edit?js,console

的链接
function Obj() {
    //using 'this' and var produces the same result
    //this.x = 1;
    var x = 1;
}
var a = new Obj();
var b = new Obj();
a.x = 2;
b.x = 3;
console.log(`a's x = ${a.x}`);
console.log(`b's x = ${b.x}`);

1 个答案:

答案 0 :(得分:1)

  

使用'这个'和var产生相同的结果

不,它没有。 macroexpand在设置对象的属性方面绝对没有任何作用。

但是,由于您之后添加了(macroexpand '(pop '(1 2 3)))属性,因此您并未发现它不会执行相同的操作。如果我们在之前查看var x = 1; ,您将其设置为2或3,我们可以看到差异。

使用x进行比较:



x




...使用this



function Obj() {
    this.x = 1;
    //var x = 1;
}
var a = new Obj();
console.log(`(1) a's x = ${a.x}`);
var b = new Obj();
console.log(`(1) b's x = ${b.x}`);
a.x = 2;
b.x = 3;
console.log(`(2) a's x = ${a.x}`);
console.log(`(2) b's x = ${b.x}`);




注意var如何开始function Obj() { //this.x = 1; var x = 1; } var a = new Obj(); console.log(`(1) a's x = ${a.x}`); var b = new Obj(); console.log(`(1) b's x = ${b.x}`); a.x = 2; b.x = 3; console.log(`(2) a's x = ${a.x}`); console.log(`(2) b's x = ${b.x}`);