当javascript函数用作对象的基础时的变量 -

时间:2012-02-15 03:55:00

标签: javascript function object

当使用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()  

3 个答案:

答案 0 :(得分:2)

使用this.variable而不是variable的关键在于您可以在构造函数范围之外引用变量而不会污染全局命名空间。

在您的示例中,talk函数已添加到构造函数中。对于更加面向对象的JavaScript方法,talk函数通常会在Cat s 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'

如果希望在构造函数调用之后将值设置为可外部编辑,则无论如何都要在构造函数范围内声明该函数以封装该值并防止进一步修改。

答案 1 :(得分:0)

试试这个:

http://www.quirksmode.org/js/this.html

基本上当你使用"这个"关键字,您正在引用一个特定于任何&#34的变量;这个"是的,在你的例子中是猫对象。

例如,如果你有一个名为color的javascript变量,并且你有一个具有颜色变量的cat对象,如果你想在特定对象的范围内引用颜色变量,你可以使用this.color,而不是颜色。

答案 2 :(得分:0)

如果您想更改名称!

cat1 = new cat("Sylvester");
cat1.name = 'Tom';
cat1.talk();​​

name仍为"Sylvester"

this.name现在是"Tom"