มีทางลัดพร้อมใช้ (น้ำตาลประโยค) สำหรับฟังก์ชั่น wrapper @CMS ที่ตอบด้วย (ด้านล่างสมมติว่าบริบทที่คุณต้องการคือthis.tip
)
หากคุณกำหนดเป้าหมายเบราว์เซอร์ที่เข้ากันได้กับ ECMA-262, รุ่นที่ 5 (ECMAScript 5)หรือNode.jsFunction.prototype.bind
คุณสามารถใช้ คุณสามารถเลือกฟังก์ชั่นผ่านข้อโต้แย้งใด ๆ ในการสร้างฟังก์ชั่นบางส่วน
fun.bind(thisArg[, arg1[, arg2[, ...]]])
ในกรณีของคุณลองสิ่งนี้:
if (this.options.destroyOnHide) {
setTimeout(this.tip.destroy.bind(this.tip), 1000);
}
มีการใช้ฟังก์ชั่นเดียวกันใน Prototype (ไลบรารีอื่นใดบ้าง)
Function.prototype.bind
สามารถนำไปใช้เช่นนี้หากคุณต้องการความเข้ากันได้แบบกำหนดเองย้อนหลัง (แต่โปรดสังเกตหมายเหตุ)
สำหรับการพัฒนาที่ล้ำสมัย (2015) คุณสามารถใช้ฟังก์ชั่นลูกศรไขมันซึ่งเป็นส่วนหนึ่งของข้อกำหนด ECMAScript 2015 (Harmony / ES6 / ES2015) ( ตัวอย่าง )
แสดงออกฟังก์ชั่นลูกศร (หรือเรียกว่าฟังก์ชั่นลูกศรไขมัน ) มีไวยากรณ์สั้นเมื่อเทียบกับการแสดงออกและฟังก์ชั่น lexically ผูกthis
ค่า [ ... ]
(param1, param2, ...rest) => { statements }
ในกรณีของคุณลองสิ่งนี้:
if (this.options.destroyOnHide) {
setTimeout(() => { this.tip.destroy(); }, 1000);
}
หากคุณใช้ jQuery 1.4+ อยู่แล้วจะมีฟังก์ชันสำเร็จรูปสำหรับการตั้งค่าthis
บริบทของฟังก์ชันอย่างชัดเจน
jQuery.proxy () : รับฟังก์ชั่นและคืนค่าใหม่ที่มักจะมีบริบทเฉพาะ
$.proxy(function, context[, additionalArguments])
ในกรณีของคุณลองสิ่งนี้:
if (this.options.destroyOnHide) {
setTimeout($.proxy(this.tip.destroy, this.tip), 1000);
}
มันมีอยู่ใน Underscore.js เช่นเดียวกับ lodash เช่น_.bind(...)
1 , 2
ผูกฟังก์ชั่นผูกกับวัตถุซึ่งหมายความว่าเมื่อใดก็ตามที่ฟังก์ชั่นที่เรียกว่ามูลค่าของthis
จะเป็นวัตถุ เลือกผูกข้อโต้แย้งไปยังฟังก์ชั่นเพื่อเติมพวกเขาล่วงหน้าหรือที่เรียกว่าแอพลิเคชันบางส่วน
_.bind(function, object, [*arguments])
ในกรณีของคุณลองสิ่งนี้:
if (this.options.destroyOnHide) {
setTimeout(_.bind(this.tip.destroy, this.tip), 1000);
}
ผูก jQuery underscore.js ECMAScript-5 prototypejs Node.js