首页 > 代码库 > jquery源码学习-构造函数(2)
jquery源码学习-构造函数(2)
最近几天一直在研究jquery源码,由于水平太低看得昏头转向。本来理解的也不是很深刻,下面就用自己的想法来说下jquery是如何定义构造函数初始化的。如果有什么不对的地方,希望个位高手指出。
一般写构造函数如下
function Aaa(){}Aaa.prototype.init = function(){};Aaa.prototype.css = function(){};var a1 = new Aaa();a1.init(); //初始化a1.css();
jQuery写法如下
function jQuery(){ return new jQuery.prototype.init(); // =>jQuery.prototype};jQuery.prototype = {
constructor : jQuery, init : function(/*初始化工作*/){}, css : function(){}}jQuery.prototype.init.prototype = jQuery.prototype;jQuery().css();
jQuery() -> new jQuery.prototype.init();
jQuery.prototype.init.prototype = jQuery.prototype;
把jQuery的原型指向了,自己的init方法(看作构造函数)的原型上。 (不知道怎么说,反正是这个意思,希望高手指出。)
注:这里加上 constructor 属性主要起到修正作用。
示例
function Aaa(){}var a1 = new Aaa();//构造函数本身, 自动生成 Aaa.prototype.constructor = Aaa;alert(a1.constructor); //Aaa//在Aaa原型上加2个属性Aaa.prototype.name = ‘hello‘;Aaa.prototype.age = 30;alert(a1.constructor); //还是Aaa,不会变化 //如果重构了Aaa的原型,即覆盖Aaa.prototype = { //constructor : Aaa, //修正指向 name: ‘hello‘, age : 30};var a1 = new Aaa();alert(a1.constructor); //如果不加constructor : Aaa 指向改变了
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。