如何访问同一javascript对象的成员?

时间:2018-06-16 22:54:54

标签: javascript object scope

说我有以下对象定义:

var car = function (engine) { 
    this.engine = engine;

    this.calculateSpeed = function () {
        return engine.power * 20;
    };
};

engine函数中的calculateSpeed()对象是指通过构造函数传入的引擎对象,而不是汽车的公共引擎成员(我想要的那个)。

如果我想在创建汽车对象后更改汽车引擎,我希望calcuateSpeed()函数引用新引擎。

Inner function cannot access outer functions variable问题与我的问题类似。但是并没有完全覆盖我的用例,因为OP使用的是局部变量并且没有构造函数。

如果你也可以解释为什么这不起作用,那也会有很大的帮助:

var car = function (engineInit) { 
    this.engine = engineInit;

    this.calculateSpeed = function () {
        return engine.power * 20;
    };
};

我知道这个简单的例子我可以使用this.calculateSpeed = engine.power * 20;但是对于我的实际用例,我需要一个函数。

3 个答案:

答案 0 :(得分:2)

您实际上可以使用file



DriveApp.getFilesByName(name).next()




答案 1 :(得分:1)

如果您希望内部engine与实例化engine外部可见的Car属性分开,您可以考虑简单地使用另一个本地范围的变量,与初始engine参数,并根据需要重新分配:



var Car = function(initialEngine) {
  this.engine = initialEngine;
  let engine = initialEngine;
  this.calculateSpeed = function() {
    return engine.power * 20;
  };
  this.changeEngine = function(newEngine) {
    engine = newEngine;
  }
};

var car = new Car({ power: 20 });
console.log(car.calculateSpeed());
car.changeEngine({ power: 40 });
console.log(car.calculateSpeed());




答案 2 :(得分:0)

这个问题与stackoverflow上的许多其他问题重复,但无论如何这里都是让你入门的东西。

通过在另一个变量中捕获它:

var car = function(engineInit) { 
  this.engine = engineInit;
  var self = this;
  this.calculateSpeed = function () {
    return self.engine.power * 20;
  };
};

使用bind:

var car = function(engineInit) { 
  this.engine = engineInit;
  this.calculateSpeed = function () {
    return this.engine.power * 20;
  }.bind(this);
};

使用函数的原型:

function Car(engine) { 
  this.engine = engine;
}

Car.prototype.calculateSpeed = function() {
  return this.engine.power * 20;
};

var engine = new Engine();
var car = new Car(engine);
var speed = car.calculateSpeed();