![](/img/trans.png)
[英]JAVASCRIPT: How do i access these javascript member functions from outside?
[英]How do I access a member of the same javascript object?
說我有以下對象定義:
var car = function (engine) {
this.engine = engine;
this.calculateSpeed = function () {
return engine.power * 20;
};
};
該engine
在對象calculateSpeed()
函數是指通過構造函數,而不是汽車的大眾發動機元件(這是一個我想要的)傳遞的引擎對象。
如果要在創建汽車對象后更改汽車的引擎,我希望calcuateSpeed()
函數引用新的引擎。
內部函數無法訪問外部函數變量的問題類似於我的。 但由於OP使用的是局部變量且沒有構造函數,因此無法完全涵蓋我的用例。
如果您還可以解釋為什么這行不通,那也會有很大幫助:
var car = function (engineInit) {
this.engine = engineInit;
this.calculateSpeed = function () {
return engine.power * 20;
};
};
我知道對於這個簡單的示例,我可以使用this.calculateSpeed = engine.power * 20;
但是對於我的實際用例,我需要一個函數。
您實際上可以使用this.engine.power
。
// Define Car constructor const Car = function (engineInit) { this.engine = engineInit; this.calculateSpeed = function () { return this.engine.power * 20; }; }; // Create new car instance const carInstance = new Car({ power: 100 }); // Log the result of calculateSpeed function console.log(carInstance.calculateSpeed());
如果希望將內部engine
與實例化的Car
外部可見的engine
屬性分開,則可以考慮簡單地將另一個局部范圍的變量與初始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());
這個問題是關於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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.