मेरा ऑडियो ऑब्जेक्ट प्रॉपर्टी के फ़ंक्शन के भीतर बनाया गया है, लेकिन मुझे इसे एक अलग ऑब्जेक्ट प्रॉपर्टी के फ़ंक्शन के भीतर से रोकना होगा। क्या मेरे कोड के पुनर्गठन के बिना ऐसा करने का कोई आसान तरीका है?

let audio = {
  train: function() {
    let train = new Audio(
      "audio link"
    );
    train.play();
  }
}

let otherObject = {
   pauseAudio: function() {
   Audio.pause();
}
0
Graham 2 पद 2019, 01:55

1 उत्तर

सामान्य स्कोपिंग नियमों के कारण, अन्य बाहरी चर (जैसे otherObject) को देखने में सक्षम होने के लिए train तत्व को audio ऑब्जेक्ट के बाहर उजागर करने की आवश्यकता है। एक संभावना audio के लिए एक और संपत्ति है, एक उप-वस्तु जिसका गुण Audio उदाहरणों को इंगित करता है:

const audio = {
  audioElements: {},
  train: function() {
    this.audioElements.train = new Audio(
      "audio link"
    );
    this.audioElements.train.play();
  }
}

const otherObject = {
  pauseAudio: function() {
    for (const audioElm of Object.values(audio.audioElements)) {
      audioElm.pause();
    }
  }
}

यह स्पष्ट नहीं है कि क्या आप वास्तव में हर बार train को कॉल करने पर अलग ऑडियो तत्व बनाना चाहते हैं। यदि नहीं, तो यह देखने के लिए जांचें कि क्या संपत्ति पहले ऑडियो धारक ऑब्जेक्ट पर मौजूद है:

const audio = {
  audioElements: {},
  train: function() {
    if (!this.audioElements.train) {
      this.audioElements.train = new Audio(
        "audio link"
      );
    }
    this.audioElements.train.play();
  }
}

let otherObject = {
  pauseAudio: function() {
    for (const audioElm of Object.values(audio.audioElements)) {
      audioElm.pause();
    }
  }
}

यह किसी भी संख्या में ऑडियो तत्वों/विधियों के लिए आसानी से एक्स्टेंसिबल होगा।

0
CertainPerformance 2 पद 2019, 02:07