簡體   English   中英

如何訪問同一JavaScript對象的成員?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM