عندما نظرت إلى الخطوة الأولى من كود مصدر jQuery ، كنت في حيرة من أمري بشأن إنشاء كائنات jQuery. بعد التفكير في الأمر لفترة طويلة ، شعرت أخيرًا بذلك. هنا أسجله
الطريقة الأولى:
var a = function () {return a.prototype.init () ؛} a.prototype = {init: function () {this.age = 50 ؛ console.log (this) ؛ return this ؛} ، العمر: 100} console.log (a () === new a ()) ؛1. تحليل لماذا النتيجة صحيحة
تسمى وظيفة A.Prototype.Init () داخليًا بواسطة A ()
الجديد A () سوف يستدعي المُنشئ داخليًا ، ومُنشئه هو الدالة () {return A.Prototype.init () ؛
2. قم بتحليل ما تعود وظيفة A.Protytype.Init ()
ذلك يعتمد على هذا ، تحديد من يشير إلى هذا. نحن بحاجة إلى تحليلها عند استدعاء الوظيفة. نظرًا لأنه يطلق عليه سمة كائن النموذج الأولي ، فهذا هو كائن النموذج الأولي A.Protype
في طريقة الخلق هذه ، بغض النظر عن عدد المرات التي تسمي فيها A () ، فهي في الواقع نفس الكائن الذي يتم إرجاعه ، وبالتالي فإن تعديل الكائن B سيؤثر على الكائن A ، انظر الشكل أدناه
var a = a () ؛ var b = a () ؛ console.log (a.age) ؛ console.log (b.age) ؛ b.age = 22 ؛ console.log (a.age) ؛ console.log (b.age) ؛ console.log (
فكيف تحل هذه المشكلة؟ دعنا نتحدث عن الطريقة الثانية ، والتي هي أيضًا الطريقة التي يستخدمها JQuery.
الطريقة الثانية
var a = function () {return new A.Prototype.Init () ؛ // ①} A.Prototype = {init: function () {this.age = 50 ؛ console.log (this) ؛ return this ؛} ، العمر: 100}A.Prototype.init.prototype = A.Prototype ؛ // ②var a = new a () ؛ var b = new a () ؛ console.log (a === b) ؛ console.log (a.age) ؛ console.log (b.age) ؛
تحليل ① و ②
① في النمط A.Prototype.Init () جديدًا يقوم بشكل أساسي بثلاثة أشياء
إنشاء كائن فارغ var obj = {} ؛
يشير OBJ Object Property_Proto_ إلى النموذج الأولي للوظيفة A.Prototype.init ؛
استبدل هذا في وظيفة A.Protype.init بكائن OBJ ، استدعاء A.Prototype.Init وظيفة ، A.Prototype.init.call (OBJ) ، وإرجاع الكائن الجديد
نظرًا لأن النموذج الأولي للكائن الذي تم إرجاعه هو النموذج A.Protype.init.prototype ، فإنه لا علاقة له بالنمط A.Protype. من أجل جعل الكائن الذي تم إرجاعه حديثًا يرث من النمط A.Protype ، ② اسمحوا A.Protype.init.protypee إلى النموذج A.Protype
لذلك ، فإن الطريقة الثانية هي إنشاء مثيل ، والتأكد من أن كل نطاق من نطاقه مستقل.
ما سبق هو شرح مفصل لمثال البناء المجاني الجديد لجافا سكريبت الذي قدمه لك المحرر. أتمنى أن يساعدك ذلك. إذا كنت تريد معرفة المزيد من المعلومات ، فيرجى الانتباه إلى موقع Wulin.com!