说我有以下对象定义:
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;
但是对于我的实际用例,我需要一个函数。
答案 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();