<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jquery1.0.1</title>
</head>
<body>
<script src="./jquery.1.0.1.js"></script>
<script>
// console.log($())
/*
init
__proto__: Object
css: ()
init: ()
__proto__: Object
*/
var ret = {name:'max',list:{age:'30'}}
var res = {list:{sex:'女'}}
var obj = $.extend({},ret, res) //给任意对象扩展,浅拷贝
var obj1 = $.extend(true, {}, ret, res) //给任意对象扩展,深拷贝
// $.extend({ //给jquery扩展
// work:function(){}
// })
// // jQuery.work();
// $.fn.extend({ //给实例对象扩展
// sex: '男'
// })
// $().sex
</script>
</body>
</html>
(function(root){
var jQuery = function(){
return new jQuery.prototype.init()
}
jQuery.fn = jQuery.prototype = {
init:function(){},
css:function(){}
}
//extend 内部|外部
//浅拷贝,深拷贝(第一个参数为true)
jQuery.fn.extend = jQuery.extend = function(){ //根据参数内容和个数来实现
var target = arguments[0] || {}
var length = arguments.length;
var i = 1;
var deep = false;
var option,name,copy,src,copyIsArray,clone;
if( typeof target === 'boolean'){ //判断是否有深浅拷贝的标识,如果是boolean类型
deep = target ; //deel复制标识
target = arguments[1]; //将要拷贝的对象赋值为第二个参数
i = 2; //要遍历的参数从第二个开始
}
if( typeof target !== 'object'){ //第一个参数不是对象,就给他赋值为空对象
target = {}
}
if(length === i){ //判断参数个数 ,如果参数个数为1,则是为 jquey/jquery实例对象 扩展对象,
target = this; //this只想对象的引用
i--
}
//浅拷贝
for(; i<length; i++){ //如果参数个数不为1,直接从第二个参数开始,若为0,则从第一个开始,产生无用消耗
if( (option = arguments[i]) != null){
for(name in option){
copy = option[name]
src = target[name];
if(deep && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))){ //深拷贝
if(copyIsArray){
copyIsArray = false;
clone = src && jQuery.isArray(src)? src :[];
}else{
clone = src && jQuery.isPlainObject(src)? src :{};
}
target[name] = jQuery.extend(deep,clone,copy)
}else if(copy != undefined){ //浅拷贝
target[name] = copy;
}
}
}
}
return target
}
// jQuery.prototype.init.prototype = jQuery.prototype;//共享原型对象
jQuery.fn.init.prototype = jQuery.fn;//共享原型对象 ,, fn是prototype的简写吧。。。
jQuery.extend({
isPlainObject:function(obj){
return toString.call(obj) === '[object Object]'
},
isArray:function(obj){
return toString.call(obj) === '[object Aarray]'
}
})
root.$ = root.jQuery = jQuery
})(this)