jquery.prototype.extend添加的方法存放在原型对象中么

jquery.prototype.extend添加的方法存放在原型对象中么,第1张

现在看到jQuery的227行,本篇读jQ的继承方法jQueryextend()。

官方作用解释是将一个或多个对象合并到目标对象中。

jQueryextend( [deep ], target, object1 [, objectN ] ):

其中deep是布尔类型,如为true,则执行深拷贝,即合并成为递归;

target是一个对象扩展,如果附加的对象被传递给这个方法将那么它将接收新的属性,如果它是唯一的参数将扩展jQuery的命名空间;

后面的object1到objectN同样作为对象,包含额外的属性合并到第一个参数

打开APP

一期一会

关注

jQuery源码研究:jQuery对象及原型上的extend()方法 原创

2019-01-10 11:40:56

1点赞

一期一会

码龄7年

关注

现在看到jQuery的227行,本篇读jQ的继承方法jQueryextend()。

官方作用解释是将一个或多个对象合并到目标对象中。

jQueryextend( [deep ], target, object1 [, objectN ] ):

其中deep是布尔类型,如为true,则执行深拷贝,即合并成为递归;

target是一个对象扩展,如果附加的对象被传递给这个方法将那么它将接收新的属性,如果它是唯一的参数将扩展jQuery的命名空间;

后面的object1到objectN同样作为对象,包含额外的属性合并到第一个参数。

看下源码实现:

jQueryextend = jQueryfnextend = function(){

//方法体

var options, name, src, copy, copyIsArray, clone,

target = arguments[ 0 ] || {},

i = 1,

length = argumentslength,

deep = false;

if ( typeof target === "boolean" ) {

deep = target;

target = arguments[ i ] || {};

i++;

}

if ( typeof target !== "object" && !isFunction( target ) ) {

target = {};

}

if ( i === length ) {

target = this;

i--;

}

for ( ; i < length; i++ ) {

if ( ( options = arguments[ i ] ) != null ) {

for ( name in options ) {

src = target[ name ];

copy = options[ name ];

if ( target === copy ) {

continue;

}

if ( deep && copy && ( jQueryisPlainObject( copy ) ||

( copyIsArray = ArrayisArray( copy ) ) ) ) {

if ( copyIsArray ) {

copyIsArray = false;

clone = src && ArrayisArray( src ) src : [];

} else {

clone = src && jQueryisPlainObject( src ) src : {};

}

target[ name ] = jQueryextend( deep, clone, copy );

} else if ( copy !== undefined ) {

target[ name ] = copy;

// 返回修改后的对象

return target;

在jQuery对象上添加extend属性,并且在jQueryfn上面也添加同样的extend属性,还记得前面jQueryfn = jQueryprototype不?jQuery对象的fn属性指针就指向jQuery对象的原型,并且因为对象都是引用类型的,所以上例代码的 *** 作意思就是:在jQuery对象和它的原型对象上都添加extend方法,该方法最后返回的是一个合并处理后的对象。

在jQuery对象上绑定的extend()和jQueryfn上绑定的extend()方法其实是不同的,前者是类方法,是静态方法,调用方法写作$extend();后者是实例方法,是成员方法,调用方法写作$(selector)extend()。

extends是继承父类,一个类来继承另外一个类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,JAVA中不支持多重继承。

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。

Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

J

在初学 Vue 的时候,都是利用 cdn 的方式在一个页面中导入 vuejs 的库文件

接着,肯定就学到了组件开发

当然,也是在单页面中

API文档告诉我们

在后来,学到了使用 vue-cli 搭配 vue 模板的方式开发组件

好了,三种组件创建的方式说完了,且在各自的环境里都能够正常的运作

在 Vue 开发中,所有的组件本质上都是由一个继承自 Vue 的构造函数创建的

比如在注册局部组件时

从视觉上,我们看到 TodoListComp 只是一个普通的 Object 对象

直接赋值给了其他组件的 components 属性里

然后,这个组件就成为了一个局部组件,并可以在注册了当前组件的内部去使用了

那它在内部做了什么,导致这个普通的对象最后可以被当成是一个正常的组件来使用呢

比如,普通对象上都没有 $el 之类的属性丢给 components 之后,就啥都有了

使用Vueextend(options)会根据传入的options创建一个VueComponent的组件构造函数并返回

既然使用 Vueextend 会返回一个组件的构造函数

那么我们就可以使用 new 这个返回的构造函数

并手动的 mount 并替换某个 dom 节点(就和 new App() 一样)

前面,我么已经知道了,所有的 vue 组件,不管是全局的还是局部的

都是利用 Vueextend 方法构建并返回出一个继承自 Vue 的组件构造函数

这个函数接受一个满足了 Vue 组件属性项的普通的 Object 对象

在vue模板文件开发中,也不例外

我们可以看看,在书写 vue 模板文件时,我们到底在写什么

我们写的是一个 vue 文件

并按照 <template></template> <script></script> ( 这里不关注 <style></style> 节点 ) 的格式编写 vue 文件

把它整合起来来看

等价于

好了,继续回到 vue 模板开发文件中

在另外一个组件中,使用此组件时,我们会 import xxx from xxxvue 并搭配 components:{ xxxx }

vue 会被 webpack 中配置的 vue-loader 处理这是我们已知的

结合上述的判断, vue-loader 仅仅只是把 vue 文件编译成了一个 vueextend(options) 创建组件所需要的 options 普通对象而已

既然 vue-loader 仅仅,只是把 vue 模板文件编译成了一个 options 普通对象

那么我们可以手动的使用 Vueextends(options) 来获得这个组件对象的构造函数

拿到此组件的构造函数,我们就可以在 组件 mounted 的时候,通过 new 的方式,挂在到 html 上了 (而无需去注册到 components,成为一个局部组件直接把它当成一个自己熟悉的不能在熟悉的构造函数调用即可)

既然我们已经知道:

我们完全可以直接使用 js 文件的方式来创建 vue 组件,进而省略 vue & vue-loader 这个执行的步骤

此 js 文件到处一个 vue 组件的构造函数

在另外一个组件里

通过这样的原理,我们完全可以在HTML页面的任意地方,任意位置,任意的挂在我们自己的组件并不一定必须使用vue声明式组件的语法

[ 码云地址 ]

所谓继承 就是子类能获得父类的所有属性以及函数(父类含final的除外)

其实用程序很好解释

如:

class B

{

string name=null;

public void fun(){}

}

class A extends B

{

int age=0;

}

那么Aname这个值就存在了

Afun()这个函数也存在了

至于楼主所说的新对象赋值 没太看懂

不过一般在函数传递时 函数的形参可以为父类

然后传递时就可以传递它的所有子类

如:

public void fun(B b){}

就可以直接将A传入为实参

如有不懂 还可以继续交流哈!

这个只能用集合来实现。

在JavaScript中,常用Array来存储和 *** 作对象:

Array:

新建:var ary = new Array(); 或 var ary = [];

增加:arypush(value);

删除:delete ary[n];

遍历:for ( var i=0 ; i < arylength ; ++i ) ary[i];

以上就是关于jquery.prototype.extend添加的方法存放在原型对象中么全部的内容,包括:jquery.prototype.extend添加的方法存放在原型对象中么、JAVA中extend是什么意思 、Vue - 组件和Vue.extend等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10081138.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存