在上一次我们大致分析了基于jquery开发组件的思路,这一次我们需要分析一下为什么需要这么编写
首先我们需要明白
”每个构造函数都有一个原型对象, 原型对象都包含一个指向构造函数的指针, 实例都包含一个指向原型对象的内部指针。” ——此段话摘自《JavaScript高级程序设计》。
首先需要将上面关于构造函数,原型,对象的关系理解清楚后再看组件:
//假设Class_function为一个类的构造函数 //上述的理解为每个构造函数都或有一个原型对象的属性 Class_function.prototype //原型对象中的属性会有一个constructor指向该原型的构造函数 Class_function.prototype.constructor= Class_function //每个实例对象存在一个指向原型的指针 obj.__proto__ = Class_function.prototype然后观察组件的编写:
首先申明并定义了组件的构造类,至于组件的功能为了实现组件对象的功能复用需要将功能函数的编写转移至组件构造类的原型对象上,并对原型对象的constructor赋构造函数。
TagsInput.prototype = { constructor: TagsInput, add:function(){}, build:function(){} };
同理在对jquery组件的注册上也是同样的道理,将组件注册进jQuery的原型链方便任意的jquery对象使用,因为$.fn = jQuery.prototype
$.fn.plugin_name = function(){ var ... = new Class_function(this, args); .... }