jquery源码笔记2-初始化函数

一、先看一个函数 hasOwnProperty

for in的时候,它会把对象的属性(包括原型的属性)遍历一遍,例如:
有这么一段代码:

var array = [];
array.push(1);
array.push(2);
array.push(3);
for(var i in array) {
console.log(i+":"+array[i]);
}

此时会输出什么呢?当然是0:1 1:2 2:3
但是如果在for in之前加上Array.prototype.say = “hello”;
再次运行会输出什么呢?
0:1 1:2 2:3 say:hello

看到了吧,这个时候,它会输出原型的属性
在很多时候,我们不需要遍历它原型的属性,还有一个原因就是,我们现在用到的对象,我们不能保证,其他开发人员,有没有,在它的原型上加一些属性呢?所以呢,我们就过滤一下我们对象的属性吧,这个时候就用到了hasOwnProperty方法,如下:

for(var i in array){
if(array.hasOwnProperty(i)) {
console.log(i+":"+array[i]);
}
}

二、初始化函数

源码中的这样写的:

    jQuery = function( selector, context ) {
        return new jQuery.fn.init( selector, context, rootjQuery );
    },

第一眼看到这个东西我是懵逼的……..
第二眼看到这个东西我还是懵逼的……..
不行,我得先简化一下 这个东西…..

1、按照我们正常的思路应该这样写

var jQuery = function(){
}

jQuery.prototype = {
    name : function(){};
    age  : function(){};
}

var jq = new jQuery();
jq.name();

我们都知道在jquery中是这么写的

jQuery.name();

我们可以想象jQuery应该返回的是一个实例对象
如果这样写的话,好理解点

var jQuery = function(){
    return new init();
}

jQuery.prototype = {
    name : function(){};
    age  : function(){};
}

var init = function(){
}

init.prototype = jQuery.prototype;

jQuery源码中是这样写的

var jQuery = function( selector, context ) {
        return new jQuery.fn.init( selector, context, rootjQuery );
}

jQuery.fn = jQuery.prototype = {
    init: function( selector, context, rootjQuery ) {}
}

jQuery.fn.init.prototype = jQuery.fn;

WTF!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值