Javascript 使用“关键字”有什么好处;这是什么;?

Javascript 使用“关键字”有什么好处;这是什么;?,javascript,Javascript,以下代码: var cody = { living:true, age:23, gender:'male', getGender:function(){return cody.gender;} }; 同: var cody = { living:true, age:23, gender:'male', getGender:function(){return this.gender;} }; 这两种代码实现相同的目标。唯一的区别是cody与关键字this的交

以下代码:

var cody = {
  living:true,
  age:23,
  gender:'male',
  getGender:function(){return cody.gender;} 
};
同:

var cody = {
  living:true,
  age:23,
  gender:'male',
  getGender:function(){return this.gender;} 
};

这两种代码实现相同的目标。唯一的区别是cody与关键字this的交换。在Javascript中使用关键字this有什么好处?它能提高性能吗?我们可以在OOP中忽略它吗?

指的是所讨论的结构的当前实例化。例如,以下操作将失败:

var cody = {
  living:true,
  age:23,
  gender:'male',
  getGender:function(){return cody.gender}
};
var codyCopy = cody;
cody = "foobar";
//undefined
alert(codyCopy.getGender());
但是,使用
这个
不会,因为它正确地引用了
密码副本

var cody = {
  living:true,
  age:23,
  gender:'male',
  getGender:function(){return this.gender}
};
var codyCopy = cody;
cody = "foobar";
//male
alert(codyCopy.getGender());

“this”关键字用于引用代码所在的当前执行上下文或对象。当您想要定义对象类型或类(例如人)时,它非常有用:

var Person = function(name, living, age, gender) {
    this.name = name;
    this.living = living;
    this.age = age;
    this.gender = gender;
    this.getGender = function(){return this.gender};
};

var cody = new Person('Cody', true, 23, 'male');
var john = new Person('John', true, 25, 'male');

这允许您使用“new”关键字创建多个具有自己值的Person唯一实例。所以在这行
var-cody=新人('cody',true,23,'male')“this”指的是cody变量,下一行指的是john变量。在代码中,“this”指的是cody变量,因为它位于cody对象内,但不是必需的,因为您没有创建具有自己值的新cody。

我认为
this
关键字完全是修饰性的。这是有道理的,而且可能会使您的代码更容易理解。这表示属性的“所有者”,因此this.gender和cody.gender没有区别,只是它们是不同的词。感谢各位的帮助和时间。这两个示例并不相同。它们只在某些情况下实现相同的结果,这取决于您如何调用所讨论的函数。非常感谢您的帮助。
var x=cody.getGender;警报(x())不起作用。(除非警告“undefined”(未定义)被视为有效。)this
的值取决于调用函数的方式。@nnnnnn是的,这就是我要说的。
的定义更改的唯一原因是上下文已更改。在您的示例中,您缓存了属于cody的函数,而我的示例缓存了整个cody函数,包括性别变量。所以当我们声明cody现在等于foobar时,
this
的值没有改变,它只是
this.gender
引用的值不再存在。它没有缓存在
getGender()
调用旁边。“在您的代码中,“this”指的是您的cody变量,因为它在cody对象中”-不,它没有。在JS中,
this
的值取决于函数的调用方式,而不是函数的定义位置。@nnnnnn在他的代码中,“this”在对象文本中而不是函数中。在OP的代码中使用
this
是在函数中。它位于
getGender
引用的函数内部。在任何情况下,我的观点是,函数如何定义并不重要,因为
this
的值是在调用函数时设置的(隐式或显式),并且可以设置为引用任何对象-这是JS函数工作方式的一个重要功能。@nnnnnnnn好的,你的权利我正在考虑一个标准的
cody.getGender()
调用,但是如果例如cody被添加到原型链中或者函数被引用到其他地方
这个
将不会引用cody。