संक्षिप्त उत्तर: this
अंक निकटतम बाउंड this
पर दिए गए कोड में this
प्रदान किए गए कोड में संलग्न क्षेत्र में पाया गया है।
लंबे समय तक जवाब: तीर कार्यों बाँध उनके this
जब वे बनाई गई हैंdo not have this
, arguments
or other special names bound at all - वस्तु बनाया जा रहा है जब नाम this
, enclosing दायरे में पाया जाता है नहीं person
वस्तु। आप घोषणा को ले जाकर अधिक स्पष्ट रूप से देख सकते हैं: (के लिए
var person = {
name = "Jason"
};
var shout = function() {
console.log("Hi, my name is", this.name);
}.bind(this);
person.shout = shout;
दोनों मामलों में, this
:
var person = {
name = "Jason"
};
person.shout =() => console.log("Hi, my name is", this);
और यहां तक कि और अधिक स्पष्ट जब ES5 में तीर वाक्य रचना के एक अस्पष्ट सन्निकटन में अनुवाद चिल्लाओ समारोह) person
के समान दायरे को इंगित करता है, यह नया स्कोप नहीं है कि जब यह person
ऑब्जेक्ट में जोड़ा जाता है तो यह नया स्कोप संलग्न होता है।
आप मेकअप तीर कार्यों कि जिस तरह से काम कर सकते हैं नहीं है, लेकिन, के रूप में @kamituel his answer में बताते हैं, आप ES6 में कम विधि घोषणा पैटर्न का लाभ लेने के समान अंतरिक्ष बचत प्राप्त करने के लिए कर सकते हैं:
var person = {
name: "Jason",
// ES6 "method" declaration - leave off the ":" and the "function"
shout() {
console.log("Hi, my name is", this.name);
}
};
स्रोत
2015-03-01 19:59:40
http://www.es6fiddle.net/ – jason328