从具有该属性的对象中访问对象属性时,应使用“this”关键字。
我做了这个演示。两种方式都很好。
那么,是否有充分的理由添加“this”或者可以将其删除?
function CalcCircle(radius) {
this.radius = radius;
this.getCircle = function () {
// Accessing the property "radius" WITH "this".
return (Math.PI * this.radius * 2);
};
}
// Without the "this" keyword.
function CalcCircle2(radius) {
this.radius = radius;
this.getCircle = function () {
// Accessing the property "radius" WITHOUT "this".
return (Math.PI * radius * 2);
};
}
var o1 = new CalcCircle(10);
var o2 = new CalcCircle2(10);
console.log('With "this": ' + o1.getCircle());
// With "this": 62.83185307179586
console.log('Without "this": ' + o2.getCircle());
// Without "this": 62.83185307179586
答案 0 :(得分:3)
不同之处在于,当您只是引用radius
时,您指的是创建对象时传递的值。
如果radius
的值在运行时在圈子上发生变化,则从getCircle
返回的值将不会在第二个值中更新。
答案 1 :(得分:1)
您可以在第二个实现中不使用this
关键字的原因是因为您的函数getCircle
正在从{{1}传入的参数中访问radius
}}
CalcCircle2
// Without the "this" keyword.
function CalcCircle2(radius) {
this.getCircle = function () {
return (Math.PI * radius * 2);
// ^^^^^^
// radius is searched for in this function scope...
// was not found.
// checks next scope chain...
// radius is found!
};
}
关键字的目的是将某个变量绑定到对象的实例。
在此特定实现中,您不需要来使用this
关键字,但在定义属性时,最好在OOP中开始使用它。一个东西。
旁注:
使用prototypical inheritance创建对象时,this
关键字变得更加有用。这是在您创建对象并为其提供可从该对象的任何实例继承的属性时。
this
在这个例子中,我们需要使用var CalcCircle = function(radius){
this.radius = radius;
}
CalcCircle.prototype.getCircle = function(){
return (Math.PI * this.radius * 2);
// ^^^^
// Now we need this
};
来引用与我们定义的其他函数中的对象关联的变量。
答案 2 :(得分:1)
您是否在this
的示例中使用CalcCircle2
仅区分您实际使用的变量。使用this
您可以使用该属性。没有this
,你正在使用构造函数的参数(通过JS闭包)。
一般来说,最好先使用一次参数,然后依靠你创建的字段。
您可能还想通过原型检查附加方法,而不是在构造函数中创建它们,在这种情况下,您将被迫使用该字段:
function CalcCircle2(radius) {
this.radius = radius;
}
CalcCircle2.prototype.getCircle = function () {
// Accessing the property "radius" WITHOUT "this".
return (Math.PI * this.radius * 2);
};
var o2 = new CalcCircle2(10);
o2.getCircle();
答案 3 :(得分:0)
两种无线电都不同
在使用this.radius
的函数中function CalcCircle(radius) {
this.radius = radius;
this.getCircle = function () {
// Accessing the property "radius" WITH "this".
return (Math.PI * this.radius * 2);
};
}
您正在访问Object的属性。
而在第二个功能
function CalcCircle2(radius) {
this.radius = radius;
this.getCircle = function () {
// Accessing the property "radius" WITHOUT "this".
return (Math.PI * radius * 2);
};
}
当你使用CalcCircle2函数的参数时。