jquery的extend函数
var extend = (function () {
var isObjFunc = function (name) {//返回的是一个函数
var toString = Object.prototype.toString
return function () {
return toString.call(arguments[0]) === '[object ' + name + ']'//谁调用函数,就指向谁的上下文;
}
}
var isObject = isObjFunc('Object'),
isArray = isObjFunc('Array'),
isBoolean = isObjFunc('Boolean')
// console.log(isObject)//返回的是一个函数
// console.log(isArray)
// console.log(isBoolean)
return function extend() {
var index = 0, isDeep = false, obj, copy, destination, source, i;
if (isBoolean(arguments[0])) {
// console.log(isBoolean(arguments[0]))//true
index = 1
// console.log(arguments[0])
isDeep = arguments[0]//ture
}
for (i = arguments.length - 1; i > index; i--) {//当i>1的时候,也就是参数值大于1的时候遍历
destination = arguments[i - 1]
source = arguments[i]
// console.log(destination)//{name:3}
// console.log(source)//{name:3}
if (isObject(source) || isArray(source)) {//如果是数组或者对象;
// console.log(source)
for (var property in source) {
obj = source[property]
if (isDeep && (isObject(obj) || isArray(obj))) {//如果是数组或者对象;
copy = isObject(obj) ? {} : []
var extended = extend(isDeep, copy, obj)
destination[property] = extended//目标的就等于深拷贝的;
} else {
destination[property] = source[property]//如果是值类型的;直接等于原来的;
}
}
} else {//如果不是数组或者对象
destination = source
}
}
return destination//返回目标对象
}
})()
var a = {name: 1}
var b = {name: 2}
var c = {name: 3}
extend(true, a, b, {name: [a, b, c], value: a})
console.log('-----------------------')
console.log(a)//{name:Array(3)}
console.log(a.name[0] === a) // false
console.log(a.value === a) // false
jquery的extend函数的更多相关文章
- 解读jQuery中extend函数
$.extend.apply( null, [ true, { "a" : 1, "b" : 2 } ] );//console.log(window.a); ...
- jQuery.fn.extend() 函数详解
jQuery.fn.extend()函数用于为jQuery扩展一个或多个实例属性和方法(主要用于扩展方法). jQuery.fn是jQuery的原型对象,其extend()方法用于为jQuery的原型 ...
- jquery的extend()函数
extend()是在写插件的过程中常用的方法,该方法有一些重载原型. 1.该方法的原型是: extend(dest,src1,src2,src3...); 它的含义是将src1,src2,src3.. ...
- jQuery.fn.extend(object) object中this的指向
看到下面的代码后,一下子懵逼了.这个this指向哪儿去了. jQuery.fn.extend({ check: function() { return this.each(function() { t ...
- jQuery中jQuery.extend() 和 jQuery.fn.extend()的功能和区别
昨天下午和今天上午断断续续的一直在看jQuery中jQuery.extend() 和 jQuery.fn.extend()两个函数的功能及区别,现在自认为是掌握的差不多了.好记性不如烂笔头,这里一方面 ...
- 图片放大功能插件及jquery.extend函数理解
前端时间,产品提出社区评论中的图片需要有放大功能.感觉可以共用,所以就想整合一个插件,过程中也借鉴了一些例子. 分析下自己的代码思路: var scaleImg = function(opts) { ...
- Jquery揭秘系列:实现$.fn.extend 和$.extend函数
前面我们扩展了bind方法和ready函数,这次我要讲一下$.fn.extend 和$.extend函数. 其他的不多说,直接切入主题吧! 先来看看这两个函数的区别: $.fn.extend是为查询的 ...
- JQuery中的extend函数
1.jQuery.fn.extend(object) 扩展 jQuery 元素集来提供新的方法(通常用来制作插件). 例如:增加两个插件方法. jQuery.fn.extend({ check: fu ...
- jQuery.extend函数详细用法!
最近在研究jQuery.把jQuery.extend扩展函数的用法记录下来. 1.扩展jQuery静态方法. }) 用法: $.test() 2.合并多个对象.为jQuery.extend(css1, ...
随机推荐
- Swift3 - compare方法之ComparisonResult说明
Swift3在实现两个对象比较时,引入了compare方法,其中,方法返回值ComparisonResult解释如下: ComparisonResult是一个枚举类型,包含了以下3个成员: 其中: q ...
- [转]最好用的 AI 开源数据集 Top 39:NLP、语音等 6 大类
原文链接 本文修正部分错误. 以下是精心收集的一些非常好的开放数据集,也是做 AI 研究不容错过的数据集. 标签解释 [经典]这些是在 AI 领域中非常著名.众所周知的数据集.很少有研究者或工程师没有 ...
- [转]webMethods公司简介
原文链接 webMethods公司简介 webMethods,Inc.(美国纳斯达克股市上市代号:WEBM)为著名业务整合软件供应商之一.公司于1996年创立,总部位于美国佛吉尼亚州(Virginia ...
- 模仿QQ 之弹出菜单
#pragma once //演示QQ2009 #define WINDOW_WIDTH 250 //窗口宽度 #define WINDOW_HEIGHT 600 //窗口高度 struct xc_i ...
- 利用Apache配置http expires值提高网站性能
HTTP头中有个expires参数,设置一个未来的时间,在这时间以前,浏览器会先从cache读取,如果没有再从服务器中读取.对于像图片,css,script等静态内容,只需发一次http reques ...
- C语言学习笔记 (004) - 数组名和数组首地址(转)
一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址.指针变量既然可以指向变量,当然也可以指向数组和数组元素(把数据起始地址或某一元素的地址放到一个指针变量中) ...
- 【struts2】名为chain的ResultType
1)基本使用 名称为“chain”的ResultType,在struts-default.xml里的配置如下: <result-type name="chain" class ...
- libevent的问题
问题: nginx error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: N ...
- SQLServer2008 全文检索摘记
最近在做全文搜索的内容,google了一下全文检索,发现了一些问题,现在总结如下: 全文索引和查询概念(摘自SQL 联机帮助)SQL Server 2008 为应用程序和用户提供了对 SQL Serv ...
- Eclipse设置项目默认编码和换行符类型
为了实现不同操作系统间的Eclipse项目移植的一致性. 一.建议设置如下: 1. 默认的项目编码统一用UTF-8 2. 默认的换行符用UNIX类型 二.具体的配置点见下图: