مبدأ العمل هذا
إذا تم استدعاء وظيفة كوسيلة كائن ، فسيتم تعيين ذلك لهذا الكائن.
نسخ رمز رمز على النحو التالي:
var parent = {
الطريقة: الدالة () {
console.log (هذا) ؛
}
} ؛
parent.method () ؛
// <-parent
لاحظ أن هذا السلوك "هش". هذا يربك معظم المطورين.
نسخ رمز رمز على النحو التالي:
thisclowncar () ؛
// <-window
تغيير هذا
تم استخدام طرق .call و .apply و .bind لتشغيل طريقة استدعاء وظائف لمساعدتنا في تحديد قيم هذا وقيم المعلمة التي تم تمريرها إلى الوظيفة.
Function.Protype.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 (هذا) ؛
وظيفة الإرجاع () {
console.log (هذا) ؛
} ؛
}
تحديد النطاق () () ؛
// <-window
// <-window
هناك طريقة شائعة لإنشاء متغير محلي للحفاظ على إشارة إلى ذلك ، ولا يجب أن يكون هناك أي متغيرات حياة في مجال العمل الفرعي. ستغطي المتغيرات التي تحمل نفس الاسم في Sub -Scope الإشارة إلى هذا في درجة الوالدين. http://www.cnblogs.com/sosoft/
نسخ رمز رمز على النحو التالي:
وظيفة الاحتفاظ () {
var seelf = هذا ؛
وظيفة الإرجاع () {
console.log (الذات) ؛
} ؛
}
الاحتفاظ () () ؛
// <-window
ما لم تكن ترغب حقًا في استخدام هذا النطاق الوالد في نفس الوقت والتيار هذه القيمة ، بسبب بعض الأسباب التي لا يمكن تفسيرها ، أفضل استخدام وظيفة. bind. يمكن استخدام هذا لتحديد نطاق الوالدين لتعيين sub -scope.
نسخ رمز رمز على النحو التالي:
وظيفة UP () {) {)
وظيفة الإرجاع () {
console.log (هذا) ؛
} .bind (هذا) ؛
}
استراحة () ()؛
// <-window