1

我正在通过该prototype方法扩展构造函数类的功能,但我无法弄清楚如何访问即将成为构造函数类的实例。

假设我们有以下类:

Bla = function()
{
    this.a = 5;
}

很简单。现在,我将用一个非常简单的方法来扩展它......

Bla.prototype.f = function(){console.log("Abdf.")};

new Bla().f(); //Logs "Abdf as expected."

但是,如果我想访问a属性 (5) 怎么办?假设我正在尝试像这样扩展构造函数类:

Bla.prototype.f2 = function(b){return b * here_are_the_problems.a};

显然 usingthis指的是别的东西。我应该改用什么?

4

2 回答 2

2

用于this引用调用方法的对象...

console.log(this.a);

有几种方法this可以设置 的值。一是如果函数作为对象的方法被调用,一般是指调用函数的对象。

Bla = function()
{
    this.a = 5;
}


Bla.prototype.f = function(){console.log(this.a)};

var bla = new Bla();

bla.f(); //Logs 5

所以你可以看到,由于f被作为变量Bla引用的实例的方法调用,所以in的值将被设置为引用同一个对象。blathisf

于 2012-06-16T19:58:59.817 回答
2

使用this关键字访问任何实例属性或方法。 this代表实例。由于a是实例属性,prototype方法是实例方法,因此可以在prototype.

Bla = function() {
    this.a = 5;
};
Bla.prototype.foo = function () {
   console.log( this.a );
}

var x = new Bla;
x.foo(); // logs 5
​

但是,如果我们直接向 Bla 添加一个方法...

Bla.bar = function () {
   console.log( this.a ); // ERRORRRRR
}

因为 bar 不是实例 ( prototype) 方法。在这种情况下,它是static methodofBla并且没有实例并且this引用 function Bla.bar,在这种情况下没有属性a

于 2012-06-16T19:59:54.140 回答