'这'在嵌套函数中

时间:2015-12-03 01:49:54

标签: javascript this

   var EventEmitter = require('events').EventEmitter;
        var Counter = function (init) {
            this.increment = function () {
                init++;
                this.emit('incremented', init);
            }
        }
        Counter.prototype = new EventEmitter();
        var counter = new Counter(10);
        var callback = function (count) {
            console.log(count);
        }
        counter.addListener('incremented', callback);

        counter.increment(); // 11
        counter.increment(); // 12

在上面的示例中,this中的this.increment指的是反对象。 this.emit中的内容是什么意思?是增量对象还是计数器?如何执行发射?

4 个答案:

答案 0 :(得分:0)

你问的this将是一个对象,它具有最终调用this.increment函数的函数的上下文,因为this.increment将被称为简单函数而不是使用new关键字进行对象实例化。

  

在大多数情况下,其值取决于函数的大小   调用。

     

在函数内部,其值取决于函数的方式   调用。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this

答案 1 :(得分:0)

当您在Object.prototype上直接定义任何内容时,它将被所有对象继承。也许在代码的任何地方都有如下定义:

Object.prototype.emit = function(stringValue, function(){});

答案 2 :(得分:0)

A= function(){ 
  this.name = 'test';
  this.show = function(){
    console.log(this);
  }
  console.log(this);
}

A(); // window
b = new a(); // A
b.show(); // A
c = b.show; //  function(){ console.log(this); }
c();  // window
c.call(1) // Number {[[PrimitiveValue]]: 1}
  

在大多数情况下,其值取决于函数的大小   调用。它不能在执行期间通过赋值设置,也可能是   每次调用函数时都不同。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this

答案 3 :(得分:-4)

this.emit指的是增量对象。

在JavaScript中,这总是指我们正在执行的函数的“所有者”,或者更确切地说,指向函数是其方法的对象。