常见构造函数创建实例和无new创建实例。原文地址
// 无new创建
function Test() {
// 不能使用 this
return new Object()
}
// new 有神奇的作用
function Test() {}; new Test();
jquery代码
jQuery = function (selector,context) {
return new jQuery.prototype.init()
}
jQuery.prototype = {
init: function () {
this.name =
return this
},
say: function () {}
}
jQuery.prototype.init.prototype = jQuery.prototype
-
return new 类
是为了无new和隔离各个实例 - new作用
- 创建对象,this指向该对象
- 在
init
中this
无法获取jQuery
上的方法,因此原型重定向
小案例分析
$().say()
- 由于返回的是
init
对象,会通过__proto__
查询init
的prototype
上有没有 -
init
原型上本来没有,由于原型成定向,它又指向jQuery
上的prototype
- 由于
jQuery
上的prototype
有该方法,所以调用
链式调用
- 方法在必要的时候返回
this
插件接口
- 使用的是
extend
,因此,我们就来看看extend
函数
jQuery.extend = jQuery.fn.extend = function () {
// 初始化变量
// 处理各种,不同参数导致的问题
// 主要逻辑
for () {
// 第一层,循环各个source
if () {
// 如果是对象
for () {
// 第二层,遍历对象各个属性
if () {
// 如果,属性值是对象或数组,递归
}else {
// 如果,属性值不是对象或数组,直接赋值
}
}
}
}
// return 改变后的目标
}
总结
- 整体框架,一些伪代码,然后细化