extend函数,jQuery.extend 函数代码详解
extend函数,jQuery.extend 函数代码详解详细介绍
本文目录一览: jQuery.extend 函数代码详解
JQuery的extend扩展方法:
Jquery的扩展方法extend是我们在写插件的过程中常用的方法,该方法有一些重载原型,在此,我们一起去了解了解。
一、Jquery的扩展方法原型是:
复制代码 代码如下:
extend(dest,src1,src2,src3...);
它的含义是将src1,src2,src3...合并到dest中,返回值为合并后的dest,由此可以看出该方法合并后,是修改了dest的结构的。如果想要得到合并的结果却又不想修改dest的结构,可以如下使用:
复制代码 代码如下:
var newSrc=$.extend({},src1,src2,src3...)//也就是将"{}"作为dest参数。
这样就可以将src1,src2,src3...进行合并,然后将合并结果返回给newSrc了。如下例:
复制代码 代码如下:
var result=$.extend({},{name:"Tom",age:21},{name:"Jerry",sex:"Boy"})
那么合并后的结果
复制代码 代码如下:
result={name:"Jerry",age:21,sex:"Boy"}
也就是说后面的参数如果和前面的参数存在相同的名称,那么后面的会覆盖前面的参数值。
二、省略dest参数
上述的extend方法原型中的dest参数是可以省略的,如果省略了,则该方法就只能有一个src参数,而且是将该src合并到调用extend方法的对象中去,如:
1、$.extend(src)
该方法就是将src合并到jquery的全局对象中去,如:
复制代码 代码如下:
$.extend({ hello:function(){alert('hello');} });
就是将hello方法合并到jquery的全局对象中。
2、$.fn.extend(src) 该方法将src合并到jquery的实例对象中去,如:
复制代码 代码如下:
$.fn.extend({ hello:function(){alert('hello');} });
就是将hello方法合并到jquery的实例对象中。
下面例举几个常用的扩展实例:
复制代码 代码如下:
$.extend({net:{}});
这是在jquery全局对象中扩展一个net命名空间。
复制代码 代码如下:
$.extend($.net,{ hello:function(){alert('hello');} })
这是将hello方法扩展到之前扩展的Jquery的net命名空间中去。
三、Jquery的extend方法还有一个重载原型:
复制代码 代码如下:
extend(boolean,dest,src1,src2,src3...)
第一个参数boolean代表是否进行深度拷贝,其余参数和前面介绍的一致,什么叫深层拷贝,我们看一个例子:
复制代码 代码如下:
var result=$.extend( true, {}, { name: "John", location: {city: "Boston",county:"USA"} }, { last: "Resig", location: {state: "MA",county:"China"} } );
我们可以看出src1中嵌套子对象location:{city:"Boston"},src2中也嵌套子对象location:{state:"MA"},第一个深度拷贝参数为true,那么合并后的结果就是:
复制代码 代码如下:
result={name:"John",last:"Resig", location:{city:"Boston",state:"MA",county:"China"}}
也就是说它会将src中的嵌套子对象也进行合并,而如果第一个参数boolean为false,我们看看合并的结果是什么,如下:
复制代码 代码如下:
var result=$.extend( false, {}, { name: "John", location:{city: "Boston",county:"USA"} }, { last: "Resig", location: {state: "MA",county:"China"} } );
那么合并后的结果就是:
复制代码 代码如下:
result={name:"John",last:"Resig",location:{state:"MA",county:"China"}}
以上就是$.extend()在项目中经常会使用到的一些细节。
http://www.baiduhl.com/z/2016/01/22/276.html
python里的extend函数为什么不能添加数值?
extend的实现支持这么写: Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> a = ["hello","world"]>>> b = ["!"]>>> a.extend(b)>>> a['hello', 'world', '!']>>> a.extend("!")>>> a['hello', 'world', '!', '!']>>> a.extend(["!"])>>> a['hello', 'world', '!', '!', '!']>>>
extend函数添加的对象必须是可迭代序列。字符串和列表都是可迭代序列,但数字不是。
可以改成num=[6],做成列表,就可以加进去了。
js 中 Event.observe()和Object.extend()函数的作用和用法,请高手帮帮我,谢啦
Object.extend = function (destination, source) {
for ( var property in source) {
destination[property] = source[property];
}
return destination;
}
Prototype 对Object类进行的扩展主要通过一个静态函数Object.extend(destination, source)实现了JavaScript中的继承。 从语义的角度, Object.extend(destination, source)方法有些不和逻辑, 因为它事实上仅仅实现了从源对象到目标对象的全息拷贝。不过你也可以这样认为:由于目标对象拥有了所有源对象所拥有的特性, 所以看上去就像目标对象继承了源对象(并加以扩展)一样。另外, Prototype对Object扩展了几个比较有用的静态方法, 所有其他的类可以通过调用这些静态方法获取支持。
JScript code
Object.extend=function(destination, source) { // 一个静态方法表示继承, 目标对象将拥有源对象的所有属性和方法
for (var property in source) {
destination[property] = source[property]; // 利用动态语言的特性, 通过赋值动态添加属性与方法
}
return destination; // 返回扩展后的对象
}
Object.extend(Object, {
inspect: function(object) { // 一个静态方法, 传入一个对象, 返回对象的字符串表示
try {
if (object == undefined) return'undefined'; // 处理undefined情况
if (object ==null) return'null'; // 处理null情况
// 如果对象定义了inspect方法, 则调用该方法返回, 否则返回对象的toString()值
return object.inspect ? object.inspect() : object.toString();
} catch (e) {
if (e instanceof RangeError) return'...'; // 处理异常情况
throw e;
}
},
keys: function(object) { // 一个静态方法, 传入一个对象, 返回该对象中所有的属性, 构成数组返回
var keys = [];
for (var property in object)
keys.push(property); // 将每个属性压入到一个数组中
return keys;
},
values: function(object) { // 一个静态方法, 传入一个对象, 返回该对象中所有属性所对应的值, 构成数组返回
var values = [];
for (var property in object) values.push(object[property]); // 将每个属性的值压入到一个数组中
return values;
},
clone: function(object) { // 一个静态方法, 传入一个对象, 克隆一个新对象并返回
returnObject.extend({}, object);
}
});
vue组件继承并重写属性方法
1、Vue.extend()
vue 中 通过 Vue.extend() 函数来创建一个“子类”。
Vue.extend() 的参数是一个包含组件选项的对象。其中,data 选项必须是一个函数而不能是一个对象。
继承而来的子组件会拥有其父组件的一切属性和方法。2、extends
类型:Object | Function
详细:
允许声明扩展另一个组件 (可以是一个简单的选项对象或构造函数),而无需使用 Vue.extend。这主要是为了便于扩展单文件组件。这和 mixins 类似。
jquery 怎么调不到extend扩展方法
在使用Jquery开发的过程中,extend是常用的参数处理函数,特别是对默认值的使用。
Jquery的扩展方法原型是:
var v=$.extend(dest,src1,src2,[,src3...]);
作用是把src1,src2,src3合并到到dest中并返回合并后的dest.
但是在使用过程中,默认值往往是不能被改变的,
如下:
var defaut={'selector':'select','default':'默认值','backcolor':'#85e137','forecolor':'#000'};
var src={'selector':'ss','default':'笑话','backcolor':'#fff','forecolor':'red'};
如果我们使用
var v=$.extend(dfault,src);
来进行参数的处理,那么下一次处理的时候默认值就是这次处理之后的值而不是真实的默认值了。
我们可以用下面的代码:
var v=$.extend({},dfault,src);
即我们使用一个空的对象作为目标参数(default),将默认参数作为第一次源参数(src),这样同样是返回了合并后的参数,但是我们的default没有被改变,还可以再次使用!
这样就实现了默认值保持不变的效果了!
jquery中$.extend()与$.fn.methodName定义有什么区别?
$.extend()创建jQuery实用工具函数, 该函数不用来操作DOM元素,而是用来操作javascript非元素对象或执行其它对象特定的操作.比如写一个格式化日期的函数
$.fn.methodName 创建新的包装器方法,它操作jQuery包装器,比较明显的一点,该方法体内可以使用this,它代表引用的包装集(如果使用的是each()迭代器,this表示当前迭代的DOM对象), 定义新的包装器方法有个非常重要的规则:除非有意让方法返回特定的值,否则应该总是返回包装集作为包装器方法的返回值.这样使得新命令能够参与任务jQuery链
Python新手学生必备函数
这些函数都不会就别开始学Python初学者必备!
Python初学者必备函数
1、基础函数
(1) print输出
(2) input输入
(3) int转整型
(4) float转浮点型
(5) str转字符串
(6) type返回对象的类型
(7) isinstance返回布尔值(True, False)
2、流程控制
(1)if语句:执行1条件判断
(2) if条件:代码块1else:代码块2条件判断
(3) while判断循环
(4) for计数循环
(5) range范围函数, 可控制开始位置、结束位置和步长
(6) break跳出循环
(7) continue跳过本次循环, 后面的循环继续执行
Python初学者必备函数
3.列表
(1) append向列表中添加对象, 并添加到末尾
(2) extend(可迭代对象) 将可迭代对象中数据分别添加到列表中,并添加到末尾
(3) insert(下标, 对象) 向指定下标位置添加对象
(4) clear清空列表
(5) pop删除下标指定的元素, 如果不加下标则删除最后一个元素小红书
(6) remove(对象) 删除指定的对象
(7) del删除变量或指定下表的值
(8) copy浅拷贝
(9) count(对象) 返回对象在列表中出现的次数
(10) index(value, 开始下标, 结束下标) 元素出现的第一次下标位置,也可自定义范围
(11) reverse原地翻转
(12) sort(key=None, reverse=False) 快速排序, 默认从小到大排序, key:算法
Python初学者必备函数
4.元组
(1) list(元祖) 元祖转换成列表
(2) tuple(列表) 列表转换成元祖
(3)元祖的函数操作与列表大致相同相同,不赘述
5.字符串
(1) capitalize() 把字符串的第一个字符改为大写, 后面的小写
(2) case fold 0把整个字符串都小写
(3) encode() 编码str-bytes(二进制字符串)
(4) decode() 解码
(5) count(sub, start, stop) 返回字符(sub) 出现的次数, star:开始下标, stop:结束下标
(6) find(sub, start, stop) 返回sub第一次出现的下标, 查不到返回-1
(7) index(sub, start, stop) 返回sub第一次出现的下标
(8) upper()将字符串转为大写
(9) lower) 将字符串转为小写
(10) format() 将字符串按某种格式输出
6、函数
(1) 函数名.doc获取函数的文档内容
(2) help(函数名) 查看函数文档
(3) global变量声明变量为全局变量(可用于任何地)
(4) nonlocal变量声明的变量为全局变量(用于函数嵌套, 变量存在于上一级函数)
7、进程和线程
(1) os.getpid() 获取当前进程的编号
(2) multiprocessing current process(获取当前进程的名习
(3) os getppid 0获取当前父进程的编号
(4) Thread(target=None, name=None, args=() , kwargs=None) target:可执行目标, name:线程的名字默认Thread-N,args/kwargs:目标参数(5) start() 启动子线程
(6) threading current_thread(获取当前进程的名字
python语言中可以调用的函数有哪些?
Python语言中有很多内置函数和标准库函数可以直接调用,同时还可以自定义函数和调用其他模块中的函数。以下是一些常用的Python内置函数和标准库函数:
数学函数:abs(), pow(), round(), max(), min(), math库中的sin(), cos(), tan(), pi等函数。字符串函数:len(), str(), int(), float(), ord(), chr(), upper(), lower(), replace(), split()等函数。列表函数:append(), extend(), insert(), remove(), pop(), sort(), reverse()等函数。文件操作函数:open(), read(), write(), close()等函数。时间和日期函数:time(), sleep(), strftime()等函数。正则表达式函数:re.compile(), re.search(), re.match(), re.sub()等函数。网络编程函数:socket库中的socket(), bind(), listen(), accept()等函数。
Vue - 组件和Vue.extend
在初学 Vue 的时候,都是利用 cdn 的方式在一个页面中导入 vue.js 的库文件.
接着,肯定就学到了组件开发.
当然,也是在单页面中.
API文档告诉我们
在后来,学到了使用 vue-cli 搭配 .vue 模板的方式开发组件.
好了,三种组件创建的方式说完了,且在各自的环境里都能够正常的运作.
在 Vue 开发中,所有的组件本质上都是由一个继承自 Vue 的构造函数创建的.
比如在注册局部组件时.
从视觉上,我们看到 TodoListComp 只是一个普通的 Object 对象.
直接赋值给了其他组件的 components 属性里.
然后,这个组件就成为了一个局部组件,并可以在注册了当前组件的内部去使用了.
那它在内部做了什么,导致这个普通的对象最后可以被当成是一个正常的组件来使用呢?
比如,普通对象上都没有 $el 之类的属性.丢给 components 之后,就啥都有了.
使用Vue.extend(options)会根据传入的options创建一个VueComponent的组件构造函数并返回.
既然使用 Vue.extend 会返回一个组件的构造函数.
那么我们就可以使用 new 这个返回的构造函数
并手动的 mount 并替换某个 dom 节点(就和 new App() 一样)
前面,我么已经知道了,所有的 vue 组件,不管是全局的还是局部的.
都是利用 Vue.extend 方法构建并返回出一个继承自 Vue 的组件构造函数.
这个函数接受一个满足了 Vue 组件属性项的普通的 Object 对象.
在.vue模板文件开发中,也不例外.
我们可以看看,在书写 .vue 模板文件时,我们到底在写什么?
我们写的是一个 .vue 文件.
并按照
( 这里不关注 节点 ) 的格式编写 .vue 文件.
把它整合起来来看.
等价于
好了,继续回到 .vue 模板开发文件中.
在另外一个组件中,使用此组件时,我们会 import xxx from xxx.vue 并搭配 components:{ xxxx }
.vue 会被 webpack 中配置的 vue-loader 处理.这是我们已知的.
结合上述的判断, vue-loader 仅仅只是把 .vue 文件编译成了一个 vue.extend(options) 创建组件所需要的 options 普通对象而已.
既然 vue-loader 仅仅,只是把 .vue 模板文件编译成了一个 options 普通对象.
那么我们可以手动的使用 Vue.extends(options) 来获得这个组件对象的构造函数.
拿到此组件的构造函数,我们就可以在 组件 mounted 的时候,通过 new 的方式,挂在到 html 上了. (而无需去注册到 components,成为一个局部组件.直接把它当成一个自己熟悉的不能在熟悉的构造函数调用即可.)
既然我们已经知道:
我们完全可以直接使用 .js 文件的方式来创建 vue 组件,进而省略 .vue & vue-loader 这个执行的步骤.
此 .js 文件到处一个 vue 组件的构造函数.
在另外一个组件里
通过这样的原理,我们完全可以在HTML页面的任意地方,任意位置,任意的挂在我们自己的组件.并不一定必须使用.vue声明式组件的语法.
[ 码云地址 ]
extend发法用什么方法可以代替
jQuery为开发插件提拱了两个方法,分别是:
jQuery.fn.extend();
jQuery.extend();
虽然 javascript 没有明确的类的概念,但是用类来理解它,会更方便。
jQuery便是一个封装得非常好的类,比如我们用 语句 $("#btn1") 会生成一个 jQuery类的实例。
jQuery.extend(object); 为jQuery类添加类方法,可以理解为添加静态方法。如:
jQuery.extend({
min: function(a, b) { return a < b ? a : b; },
max: function(a, b) { return a > b ? a : b; }
});
jQuery.min(2,3); // 2
jQuery.max(4,5); // 5
ObjectjQuery.extend( target, object1, [objectN])用一个或多个其他对象来扩展一个对象,返回被扩展的对象
var settings = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
jQuery.extend(settings, options);
结果:settings == { validate: true, limit: 5, name: "bar" }
jQuery.fn.extend(object); 对jQuery.prototype进得扩展,就是为jQuery类添加“成员函数”。jQuery类的实例可以使用这个“成员函数”。
比如我们要开发一个插件,做一个特殊的编辑框,当它被点击时,便alert 当前编辑框里的内容。可以这么做:
$.fn.extend({
alertWhileClick:function() {
$(this).click(function(){
alert($(this).val());
});
}
});
$("#input1").alertWhileClick(); // 页面上为:
$("#input1") 为一个jQuery实例,当它调用成员方法 alertWhileClick后,便实现了扩展,每次被点击时它会先弹出目前编辑里的内容。