2017-10-29 11 views
5

मैं एक चर जोड़ने के लिए homebridge-wink3 कोड को संशोधित करने का प्रयास कर रहा हूं, इसलिए मैं राज्य को ट्रैक कर सकता हूं। मेरे घर में 5 रंग हैं, इसलिए चर के प्रत्येक उदाहरण को अद्वितीय होना चाहिए।जावास्क्रिप्ट निर्यात - इंस्टेंटिएट वैरिएबल/ऑब्जेक्ट्स

shade.js फ़ाइल में, यह है;

exports.default = ({ Characteristic, Service }) => { 
    return { 
    type: "shade", 
    group: "shades", 
    services: [{ 
     service: Service.WindowCovering, 
     characteristics: [{ 
     characteristic: Characteristic.TargetPosition, 
     get: (state, desired_state) => desired_state.position * 100, 

मैं बदलना चाहते हैं get (और set कोड में कहीं) तो यह स्थिति को ट्रैक करने के लिए एक स्थानीय चर lastState उपयोग करता है।

get: (state, desired_state) => { 
       if (desired_state.position != null) { 
         lastState = desired_state.position * 100; 
       } 
       else if (lastState != undefined) { 
         desired_state.position = lastState/100; 
       } 
       return lastState; 

मैं घंटे खर्च किया है बाहर काम करने के लिए कैसे कोड छाया प्रति व्यक्ति चर (वस्तु दृष्टान्त) को बनाए रखने के लिए कोशिश कर रहा है, लेकिन वे हमेशा lastState चर का एक ही उदाहरण साझा करने लगते हैं।

मुझे यहां क्या करने की ज़रूरत है?

कोड के लिए https://github.com/sibartlett/homebridge-wink3/blob/master/src/devices/shade.js देखें।

+0

आपने अंतिमस्टेट चर परिभाषित किया है? –

+0

@ JorgeFuentesGonzález कहीं भी नहीं। यही मेरा सवाल पूछ रहा है। मैं कहां और कैसे घोषित करूं? कोड ES7 में लिखा गया है, और मूल 'export.default' पैरामीटर (प्रकार, समूह, सेवाएं []) का एक गुच्छा वापस करने के लिए प्रतीत होता है। मुझे 'get' पैरामीटर/फ़ंक्शन को स्थानीय चर (मेरे उदाहरण में;' lastState') तक पहुंच की आवश्यकता है जिसे 'set' पैरामीटर/फ़ंक्शन द्वारा सेट किया जा सकता है। – mriksman

+1

मैं 'होमब्रिज-विंक 3' उपयोगकर्ता नहीं हूं, लेकिन मैं मदद करने के लिए अपनी पूरी कोशिश करूंगा। समस्या यह है कि मुझे नहीं पता कि आपने अभी तक क्या प्रयास किया है और मैं वही काम करने की कोशिश कर रहा हूं जो आपने घंटों तक करने की कोशिश की है। इसके बारे में मेरी सोच आमतौर पर बाकी स्टैक ओवरफ्लो सदस्यों के बारे में सोचती है, तो, आपने अभी तक क्या प्रयास किया है? –

उत्तर

1

महत्वपूर्ण: क्या मैं आपके सवाल का समझते हैं कि आप एक वस्तु (lastState या get और set विधि के साथ वस्तु) क्लोन करने के लिए चाहते हैं।

var A = { 
     aVariable: "Panem et circencem", 
     aMethod: function() { 
     return (["Veni", "vidi", "vici"]); 
     } 
    }; 

अब, मान लीजिए कि मैं एक वस्तु बी

function clone(obj) { 
    if (null == obj || "object" != typeof obj) return obj; 
    var copy = obj.constructor(); 
    for (var attr in obj) { 
    if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr]; 
    } 
    return copy; 
} 

var B = clone(A); 

यह एक नमूना उदाहरण है करने के लिए वस्तु एक क्लोन करने के लिए चाहते हैं:

मान लीजिए मैं इस तरह एक वस्तु एक है

 
 
var A = { 
 
    aVariable: "Panem et circencem", 
 
    aMethod: function() { 
 
    return (["Veni", "vidi", "vici"]); 
 
    } 
 
}; 
 
function clone(obj) { 
 
    if (null == obj || "object" != typeof obj) return obj; 
 
    var copy = obj.constructor(); 
 
    for (var attr in obj) { 
 
    if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr]; 
 
    } 
 
    return copy; 
 
} 
 

 
var B = clone(A); 
 
B.aVariable = "Ad gloriam"; 
 
console.log(B); 
 
console.log (A);

फिर, आप अपने ऑब्जेक्ट में कुछ विशिष्ट गुण रखने के लिए अपने सभी ऑब्जेक्ट को क्लोन/कॉपी कर सकते हैं या अपने कोड में lastState क्लोन कर सकते हैं। मुझे आपके प्रश्न के इस हिस्से को समझ में नहीं आया, मुझे क्षमा करें।

नोट:यह प्रश्न प्रश्न का उत्तर देने का प्रयास करता है। अगर मुझे सवाल नहीं समझा, तो कृपया मुझे एक टिप्पणी बताएं।

यह भी ध्यान दें:मैं सवाल का जवाब नहीं है, तो अपने ऊपर कोड Poste उपयोग करने के लिए स्वतंत्र हैं और क्रम सवाल का जवाब देने में मेरी पोस्ट की प्रतिलिपि बनाएँ।

इसी तरह ध्यान दें:आपसे एक सवाल है, तो मुझे एक टिप्पणी बताओ।

+0

मैं क्लोन नहीं करना चाहता हूं। मुद्दा 'export.default' (मुझे लगता है) का उपयोग है। आपका कोड 'commonJS' (??) जैसा दिखता है जो शायद इस' ES7' कोड में सीधे नहीं जुड़ सकता है। सवाल का जवाब देने के लिए सबसे अच्छी बात यह है कि मैंने अपने प्रश्न में सूचीबद्ध लिंक खोलना है। आपको यह 'shade.js' फ़ाइल को कॉल करने में सक्षम होना चाहिए, ऑब्जेक्ट/मॉड्यूल/डिवाइस को कैसे चालू किया जाता है और फिर मैं इन त्वरित वस्तुओं में से प्रत्येक के लिए स्थानीय चर ('lastState') में राज्य को कैसे ट्रैक करूंगा। – mriksman

+0

'export.default' का अर्थ है कि यह एक कार्य है। फ़ंक्शन (मेरे प्रश्न में दिखाया गया) बस एक 'वापसी' फ़ंक्शन है जो पैरामीटर की एक सूची देता है। ES6 में, और इस फ़ंक्शन में, मैं एक वेरिएबल कैसे जोड़ सकता हूं जो ऑब्जेक्ट/मॉड्यूल/डिवाइस के जीवन के लिए जारी रहेगा? – mriksman

+0

@ मिरिकमैन, ऑब्जेक्ट के जीवन के लिए बने रहने का क्या मतलब है? –

1

तुम बस वापसी कथन ऊपर lastState घोषणा कर सकते हैं,

let lastState; 
return { 
    type: "shade", 
    group: "shades", 

या निर्यात बयान से ऊपर,

let lastState; 
export default ({ Characteristic, Service }) => { 

यदि आप जहां 5 उदाहरण बना रूप में एक ही दायरे में lastState घोषित तो वे सभी एक ही lastState साझा करेंगे।

+0

पहला व्यक्ति इस बात पर निर्भर करता है कि 'होमब्रिज-विंक 3' कैसे काम करता है। हो सकता है कि यह निर्यात एक बार चलाता है और फिर वापसी को कैश करता है, हर समय एक ही दायरे को साझा करता है। साथ ही, दूसरा एक ही दायरे को निश्चित रूप से साझा करेगा, क्योंकि कोड नोड.जेएस में केवल 1 बार चलाया जाता है, और फिर निर्यात कैश किया जाता है, इसलिए निर्यात के बाहर क्या है निर्यात के अंदर सब कुछ के लिए एक ही दायरा है। –

+0

मुझे यकीन है कि 'स्कोप्स' और ईएस 6 और ईएस 7 समझने वाले किसी व्यक्ति से जिथब पर कोड पर एक त्वरित नज़र डालें और ... इस मुद्दे को जल्दी से निर्धारित करने में सक्षम होगा। मेरा कौशल-सेट बस इस निर्यात और दायरे के सामान के साथ खरोंच तक नहीं है। मैं आम जेएस के साथ मुश्किल से सक्षम था, लेकिन यह मेरे लिए नया है ... – mriksman

+0

क्या आपने सुझाए गए उत्तर का प्रयास किया था? – Pratheep

संबंधित मुद्दे