หลักการทำงานนี้
หากฟังก์ชั่นถูกเรียกว่าเป็นวิธีวัตถุสิ่งนี้จะถูกกำหนดให้กับวัตถุนี้
คัดลอกรหัสรหัสดังนี้:
var parent = {
วิธี: ฟังก์ชัน () {
console.log (นี่);
-
-
parent.method ();
// <-parent
โปรดทราบว่าพฤติกรรมนี้เป็น "เปราะบาง" มาก สิ่งนี้สร้างความสับสนให้กับนักพัฒนาส่วนใหญ่
คัดลอกรหัสรหัสดังนี้:
thisclowncar ();
// <-window
เปลี่ยนสิ่งนี้
. call, .apply และ. bind ถูกใช้เพื่อใช้วิธีการเรียกใช้ฟังก์ชันเพื่อช่วยให้เรากำหนดค่าของสิ่งนี้และค่าพารามิเตอร์ที่ส่งผ่านไปยังฟังก์ชัน
function.prototype.call สามารถมีจำนวนพารามิเตอร์ใด ๆ
คัดลอกรหัสรหัสดังนี้:
array.prototype.slice.call ([1, 2, 3], 1, 2)
// <- [2]
function.prototype.apply คล้ายกับ. call แต่พารามิเตอร์ที่ส่งผ่านไปยังฟังก์ชั่นคืออาร์เรย์ไม่ใช่พารามิเตอร์ใด ๆ
string.prototype.split.apply ('13 .12.02 ', ['. '])
// <- ['13', '12', '02']
function.prototype.bind สร้างฟังก์ชั่นพิเศษที่จะใช้พารามิเตอร์ที่ส่งผ่านไปยัง. bind เป็นค่าที่สามารถส่งผ่านไปยัง. -bind และเวอร์ชันของกระแสที่สามารถจัดสรรส่วนหนึ่งของพารามิเตอร์และสร้างฟังก์ชั่นดั้งเดิม
คัดลอกรหัสรหัสดังนี้:
var arr = [1, 2];
var add = array.prototype.push.bind (arr, 3);
// อย่างมีประสิทธิภาพเช่นเดียวกับ arr.push (3)
เพิ่ม ();
// อย่างมีประสิทธิภาพเช่นเดียวกับ arr.push (3, 4)
เพิ่ม (4);
console.log (arr);
// <- [1, 2, 3, 3, 4]
สิ่งนี้ในโซ่โดเมน
ในตัวอย่างต่อไปนี้สิ่งนี้จะไม่สามารถไม่เปลี่ยนแปลงในโซ่โดเมน นี่คือข้อบกพร่องของกฎและมักจะทำให้เกิดความสับสนให้กับนักพัฒนาสมัครเล่น
คัดลอกรหัสรหัสดังนี้:
ฟังก์ชั่น scoping () {
console.log (นี่);
return function () {
console.log (นี่);
-
-
scoping () ();
// <-window
// <-window
มีวิธีการทั่วไปในการสร้างตัวแปรท้องถิ่นเพื่อรักษาข้อมูลอ้างอิงถึงสิ่งนี้และจะต้องไม่มีตัวแปรชีวิตในโดเมนการกระทำย่อย ตัวแปรที่มีชื่อเดียวกันในสดีนย่อยจะครอบคลุมการอ้างอิงถึงสิ่งนี้ในคะแนนหลัก http://www.cnblogs.com/sosoft/
คัดลอกรหัสรหัสดังนี้:
ฟังก์ชั่นการรักษา () {
var seelf = this;
return function () {
console.log (ตัวเอง);
-
-
การรักษา () ();
// <-window
หากคุณไม่ต้องการใช้ขอบเขตของพาเรนต์นี้ในเวลาเดียวกันและค่านี้เป็นค่านี้เนื่องจากเหตุผลที่อธิบายไม่ได้บางอย่างฉันชอบที่จะใช้วิธีการฟังก์ชัน. bind สิ่งนี้สามารถใช้เพื่อระบุขอบเขตหลักเพื่อกำหนด sub -scope
คัดลอกรหัสรหัสดังนี้:
ฟังก์ชั่นขึ้น () {) {)
return function () {
console.log (นี่);
}. -bind (นี่);
-
หยุดพัก () ();
// <-window