当 javascript 函数用作对象的基础时,使用“this.name”而不是“name”有什么好处 -
function cat(name) {
this.name = name;
this.talk = function() {
alert( this.name + " says meeow!" )
alert( name + " says meeow!" )
}
}
cat1 = new cat("Sylvester")
cat1.talk()
最佳答案
使用 this.variable
而不是 variable
的意义在于,您可以在构造函数范围之外引用变量,而不会污染全局命名空间。
在您的示例中,构造函数中添加了 talk
函数。对于更面向对象的 JavaScript 方法,talk
函数通常定义在 Cat
的 prototype
上:
function Cat(name) {
this.name = name;
}
Cat.prototype = {
talk: function () {
alert(this.name + ' says meeow!');
}
};
请注意构造函数中未设置函数的原因是什么? talk 函数不会引用调用对象之外的 name
。
此外,在实例化 Cat
对象后,用户可以通过直接访问该属性来覆盖该值:
var a = new Cat('bob');
a.talk(); //'Bob says meeow!'
a.name = 'Joe';
a.talk(); //'Joe says meeow!'
如果您计划在不同的对象上下文中调用函数,使用 this
也很重要:
function foo(bar) {
this.baz = bar;
}
foo('fizz'); //sets window.baz === 'fizz'
var a = {};
foo.call(a, 'buzz'); //sets a.baz === 'buzz'
如果您不希望值在构造函数调用后在外部可编辑,请务必在构造函数范围内声明函数以封装值并防止进一步修改。
关于javascript - 当 javascript 函数用作对象的基础时的变量 -,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9287648/