[英]How can I access a parent object's method in javascript?
說我有一些像下面這樣的類層次結構。 引擎類是否可以訪問父級的someMethod()方法?
class vehicle{
constructor(){
this.eng = new engine();
...
}
someMethod(a){
...
}
...
}
class engine{
...
}
有多種方法可以實現所需的功能,而您必須問自己:從概念上講,這應該如何工作?
您必須重新考慮整個情況。 最重要的是,為什么引擎要關心它所在的車輛? 車輛只在乎引擎在做什么,而不在乎其他方面。
因此,假設您在車輛上有start
方法。 看起來像
start() {
this.engine.start().then(function(infofromengine) {
console.log('engine started', infofromengine);
}, function(errorfromengine) {
console.log('error in engine start', errorfromengine);
}
}
在您的引擎中,您將具有該start
方法,該方法返回Promise以及車輛可能需要了解的有關引擎的任何信息;
您還可以在初始化車輛中的引擎時,設置各種事件發射器,並在您的車輛構造函數中掛鈎這些發射器。
更進一步,您可能需要一些子組件,以便彼此了解。 因此,您可以在構造中“連接它們”。 一個與此矛盾的例子可能在您的車輛構造器中
constructor() {
this.checkEngineLight = new Light();
this.engine = new Engine({checkEngineLight});
}
在引擎上
constructor(config) {
let {checkEngineLight} = config;
this.engineLight = checkEngineLight;
}
someEngineAction() {
if (some_error_happens) this.engineLight.toggle(true, someerrorid);
}
我們之所以被稱為“軟件工程師”或“軟件架構師”,是有原因的。 我們不僅要編寫代碼,還必須考慮代碼如何與所有活動部件交互。
但是要更直接地回答您的問題,在“引擎”絕對必須直接訪問“車輛”的情況下,您必須告訴引擎有關車輛的信息……就像您對支票引擎說的那樣輕: new Engine(this)
和引擎構造函數將是constructor(vehicle)
有兩種解決方案
首先,如果您像這樣繼承父級的屬性:
class engine extends vehicle {
someMethod(a) { // method name has to be the same name as parent, calling super calls vehicle's someMethod(a) method
super(a); // vehicle.super called
}
}
或創建車輛實例並調用方法
class engine {
someMethod(a) { // can be any name, as long as its using v.someMethod(a)
const v = new vehicle();
v.someMethod(a);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.