Javascript原型:如何在另一个方法中调用一个方法?

Javascript原型:如何在另一个方法中调用一个方法?,javascript,prototype,Javascript,Prototype,这是我第一次尝试javascript原型。我正在使用ESPRUNO(微控制器javascript解释器)从环境传感器获取数据。我试图将代码暂停1000毫秒,然后执行getSensorReading()方法,该方法(我想)位于另一个方法的内部。如何执行getSensorReading()方法?我认为错误的原因是: setTimeout(function (e) { this.getSensorReading(); }, w); //Attempting to execute getSensorRe

这是我第一次尝试javascript原型。我正在使用ESPRUNO(微控制器javascript解释器)从环境传感器获取数据。我试图将代码暂停1000毫秒,然后执行getSensorReading()方法,该方法(我想)位于另一个方法的内部。如何执行getSensorReading()方法?我认为错误的原因是:

setTimeout(function (e) { this.getSensorReading(); }, w); //Attempting to execute getSensorReading()
我收到这个错误:

Uncaught Error: Function "getSensorReading" not found!  at line 1 col 8 { this.getSensorReading(); }
        ^ in function called from system
代码:

在代码中,
setTimeout
中的“this”回调指的是父函数
getSensorResult
。该函数没有名为
getSensorReading
的函数。这就是错误的原因。。。此外,当您在函数中使用全局变量时,通过对变量出价过高可能会出现意外结果。使用
var
关键字使其全局化。 试着像这样改变

getSensorReading:function() {
    var a = this.getSensorAddress;
    console.log("i2c Address: " + a);
    //var d = I2C1.readFrom(a, 7);
    return d;
  },
getSensorResult:function () {
    var a = this.getSensorAddress;
    var c = this.cmdTable.Reading.R.cmd;
    var w = this.cmdTable.Reading.R.wait;
    var that = this;
    //I2C1.writeTo(a, c);
    setTimeout(function (e) { that.getSensorReading(); }, w); //Attempting to execute getSensorReading()
  }
在代码中,
setTimeout
中的“this”回调指的是父函数
getSensorResult
。该函数没有名为
getSensorReading
的函数。这就是错误的原因。。。此外,当您在函数中使用全局变量时,通过对变量出价过高可能会出现意外结果。使用
var
关键字使其全局化。 试着像这样改变

getSensorReading:function() {
    var a = this.getSensorAddress;
    console.log("i2c Address: " + a);
    //var d = I2C1.readFrom(a, 7);
    return d;
  },
getSensorResult:function () {
    var a = this.getSensorAddress;
    var c = this.cmdTable.Reading.R.cmd;
    var w = this.cmdTable.Reading.R.wait;
    var that = this;
    //I2C1.writeTo(a, c);
    setTimeout(function (e) { that.getSensorReading(); }, w); //Attempting to execute getSensorReading()
  }
在代码中,
setTimeout
中的“this”回调指的是父函数
getSensorResult
。该函数没有名为
getSensorReading
的函数。这就是错误的原因。。。此外,当您在函数中使用全局变量时,通过对变量出价过高可能会出现意外结果。使用
var
关键字使其全局化。 试着像这样改变

getSensorReading:function() {
    var a = this.getSensorAddress;
    console.log("i2c Address: " + a);
    //var d = I2C1.readFrom(a, 7);
    return d;
  },
getSensorResult:function () {
    var a = this.getSensorAddress;
    var c = this.cmdTable.Reading.R.cmd;
    var w = this.cmdTable.Reading.R.wait;
    var that = this;
    //I2C1.writeTo(a, c);
    setTimeout(function (e) { that.getSensorReading(); }, w); //Attempting to execute getSensorReading()
  }
在代码中,
setTimeout
中的“this”回调指的是父函数
getSensorResult
。该函数没有名为
getSensorReading
的函数。这就是错误的原因。。。此外,当您在函数中使用全局变量时,通过对变量出价过高可能会出现意外结果。使用
var
关键字使其全局化。 试着像这样改变

getSensorReading:function() {
    var a = this.getSensorAddress;
    console.log("i2c Address: " + a);
    //var d = I2C1.readFrom(a, 7);
    return d;
  },
getSensorResult:function () {
    var a = this.getSensorAddress;
    var c = this.cmdTable.Reading.R.cmd;
    var w = this.cmdTable.Reading.R.wait;
    var that = this;
    //I2C1.writeTo(a, c);
    setTimeout(function (e) { that.getSensorReading(); }, w); //Attempting to execute getSensorReading()
  }

声明全局方法
foo
和子方法
bar
并将子方法本身称为函数,您可以通过寻址先前声明的变量在子方法内使用
关键字,然后将返回变量声明为子方法过程

Foo: function()
{
    var a='a';
    var ret='b';

    var Bar = function()
    {
        this.a='a';
        return 'a';    
    }

    ret=Bar();

    return ret; 
}

声明全局方法
foo
和子方法
bar
并将子方法本身称为函数,您可以通过寻址先前声明的变量在子方法内使用
关键字,然后将返回变量声明为子方法过程

Foo: function()
{
    var a='a';
    var ret='b';

    var Bar = function()
    {
        this.a='a';
        return 'a';    
    }

    ret=Bar();

    return ret; 
}

声明全局方法
foo
和子方法
bar
并将子方法本身称为函数,您可以通过寻址先前声明的变量在子方法内使用
关键字,然后将返回变量声明为子方法过程

Foo: function()
{
    var a='a';
    var ret='b';

    var Bar = function()
    {
        this.a='a';
        return 'a';    
    }

    ret=Bar();

    return ret; 
}

声明全局方法
foo
和子方法
bar
并将子方法本身称为函数,您可以通过寻址先前声明的变量在子方法内使用
关键字,然后将返回变量声明为子方法过程

Foo: function()
{
    var a='a';
    var ret='b';

    var Bar = function()
    {
        this.a='a';
        return 'a';    
    }

    ret=Bar();

    return ret; 
}

同意查看
函数.prototype.bind
,以及一般的原型链。另外,javascript是一种动态绑定语言。您可以重新绑定此

您可以将对此的引用存储为闭包变量,也可以将传递给
setTimeout
的函数文本绑定到所需的上下文(
Sensor.prototype
该上下文中的this

编辑:您可以使用apply、call或closures来完成相同的事情,而不是使用可用的
bind

getSensorResult:function () {
    a = this.getSensorAddress;
    c = this.cmdTable.Reading.R.cmd;
    w = this.cmdTable.Reading.R.wait;

    //I2C1.writeTo(a, c);
    setTimeout((function(_this) {
      return function (e) {
        _this.getSensorReading();
      }
    })(this), w); //Attempting to execute getSensorReading()
}

同意查看
函数.prototype.bind
,以及一般的原型链。另外,javascript是一种动态绑定语言。您可以重新绑定此

您可以将对此的引用存储为闭包变量,也可以将传递给
setTimeout
的函数文本绑定到所需的上下文(
Sensor.prototype
该上下文中的this

编辑:您可以使用apply、call或closures来完成相同的事情,而不是使用可用的
bind

getSensorResult:function () {
    a = this.getSensorAddress;
    c = this.cmdTable.Reading.R.cmd;
    w = this.cmdTable.Reading.R.wait;

    //I2C1.writeTo(a, c);
    setTimeout((function(_this) {
      return function (e) {
        _this.getSensorReading();
      }
    })(this), w); //Attempting to execute getSensorReading()
}

同意查看
函数.prototype.bind
,以及一般的原型链。另外,javascript是一种动态绑定语言。您可以重新绑定此

您可以将对此的引用存储为闭包变量,也可以将传递给
setTimeout
的函数文本绑定到所需的上下文(
Sensor.prototype
该上下文中的this

编辑:您可以使用apply、call或closures来完成相同的事情,而不是使用可用的
bind

getSensorResult:function () {
    a = this.getSensorAddress;
    c = this.cmdTable.Reading.R.cmd;
    w = this.cmdTable.Reading.R.wait;

    //I2C1.writeTo(a, c);
    setTimeout((function(_this) {
      return function (e) {
        _this.getSensorReading();
      }
    })(this), w); //Attempting to execute getSensorReading()
}

同意查看
函数.prototype.bind
,以及一般的原型链。另外,javascript是一种动态绑定语言。您可以重新绑定此

您可以将对此的引用存储为闭包变量,也可以将传递给
setTimeout
的函数文本绑定到所需的上下文(
Sensor.prototype
该上下文中的this

编辑:您可以使用apply、call或closures来完成相同的事情,而不是使用可用的
bind

getSensorResult:function () {
    a = this.getSensorAddress;
    c = this.cmdTable.Reading.R.cmd;
    w = this.cmdTable.Reading.R.wait;

    //I2C1.writeTo(a, c);
    setTimeout((function(_this) {
      return function (e) {
        _this.getSensorReading();
      }
    })(this), w); //Attempting to execute getSensorReading()
}
查看并
Function.prototype.bind
。而且,您忘记声明所有的局部变量;您需要使用
var
。查看并
Function.prototype.bind
。而且,您忘记声明所有的局部变量;您需要使用
var
。查看并
Function.prototype.bind
。还有,你忘了