التعريف: تحديد سلسلة من الخوارزميات ، وتغليفها واحدًا تلو الآخر في وظائف ، أو يمكن تغليفها بشكل موحد في كائن كسمات ، ثم تحديد طريقة. يمكن لهذه الطريقة تلقائيًا تحديد وتنفيذ الخوارزمية المقابلة بناءً على المعلمات.
يتم استخدامه بشكل عام عندما يكون هناك العديد من الخيارات للاختيار من بينها عند تنفيذ وظيفة.
مثال 1: احسب مكافأة نهاية العام بناءً على راتب الموظفين ، ودرجات الأداء S ، و A ، و B ، و C.
// كائن السياسة الذي يلف جميع الخوارزميات varies = {'s': function (salary) {return salary*4 ؛ } ، 'a': function (salary) {return salary*3 ؛ } ، 'b': function (salary) {return salary*2 ؛ } ، 'c': function (salary) {return salary*1 ؛ }} // تحديد طريقة خوارزمية التحديد التلقائي var calculateBonus = function (المستوى ، الراتب) {استراتيجيات الإرجاع [المستوى] (الراتب) ؛} // استخدم CalcutionBonus ('S' ، 9000) ؛ // 36000CalculateBonus ('b' ، 5000) ؛ // 10000مثال 2: التحقق من النموذج
// كائن السياسة الذي يحدد خوارزمية التحقق من الاستراتيجيات = function () {isempty: function (value ، errormsg) {if (value = '') {return errormsg ؛ }} outrangle: function (value ، min ، max ، errormsg) {if (value.length> max || value.length <min) {return errormsg ؛ }} issame: function (oldvalue ، newValue ، errormsg) {if (newValue! == oldvalue) {return errormsg ؛ }} isMobile: function (value ، errormsg) {if (!/(^1 [3 | 5 | 8] [0-9] {9} $)/. test (value)) {return errormsg ؛ }} ......}لا يمكنك أيضًا تحديد فئة المدقق التالية ، والاتصال مباشرة بطريقة السمة لكائن الاستراتيجيات عندما يتم تشغيل حدث التركيز للتحقق من عنصر الإدخال الحالي.
// define ValidatorVar Validator = function () {this.cache = [] ؛} adadator.prototype.add = function (elem ، rules) {var self = this ؛ لـ (var i = 0 ، rule ؛ rule = rules [i ++]) {(function (rule) {var strategyary = rule.strategy.split (':') ؛ var errormsg = rule.errormsg ؛ self.cache.push الاستراتيجيات [الاستراتيجية] .apply (Elem ، Strategy) ؛ if (errormsg) {return errormsg ؛ }}}يستخدم:
VAR Validator = new Validator () ؛ Valitator.add (elem.username ، [{strategy: 'isempty' ، errormsg: 'لا يمكن أن يكون اسم المستخدم فارغًا'} ، {strategy: 'outnangle: 6: 12' ، errormsg: "طول المستخدم هو 6-12 Bits '}]) ؛ ...... var errormsg =المرفق: كائن تكوين المعلمة
إذا كانت هناك وظيفة FOO (A ، B ، C ، D ، E ، F ...) ، فهي تحتوي على العديد من المعلمات ، من الصعب استخدام هذه الوظائف ويصعب تذكر المعلمات! هناك طريقة أفضل هي استخدام كائن لاحتواء هذه المعلمات ، ثم تمرير الكائن إلى الوظيفة ، ثم معالجة خصائص الكائن.
var prop = {a: 55 ، b: 'ss' ، c: function () {...} d: {x: 1 ، y: 2} ...} foo (prop) ؛وبهذه الطريقة ، ليست هناك حاجة لتذكر ترتيب المعلمة عند استخدام الوظائف. فقط تذكر العديد من أسماء السمات لكائن المعلمة ، وهو ليس من السهل ارتكاب أخطاء
المراجع: "نمط جافا سكريبت" "نمط تصميم جافا سكريبت وممارسة التطوير"
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.