Javascript的无new构建实例详解


看jquery源代码第一步的时候,对于jquery对象的创建就看的云里雾里,琢磨半天终于有点感觉了,在此记录下

第一种方式:

var A = function(){
return A.prototype.init();
}
A.prototype = {
init:function(){
this.age = 50;
console.log(this);
return this;
},
age:100
}
console.log(A() === new A());

1.分析下结果为什么为true

A()内部调用的是A.prototype.init()函数

new A() 内部会调用构造函数,而它的构造函数就是function(){return A.prototype.init();},同样调用的是A.prototype.init()函数

2.分析下A.prototype.init()函数返回什么

那就要看this了,判断this指向谁,我们要在函数调用的时候分析,由于它是作为原型对象的属性调用的,所以this就是原型对象A.prototype

这种创建方式,无论你调用多少次A(),他们其实都是返回的同一个对象,所以对b对象的修改会影响a对象,见下图

var a = A();
var b = A();
console.log(a.age);
console.log(b.age);
b.age = 22;
console.log(a.age);
console.log(b.age);

那么如何解决这种问题呢,接下来就讲下第二种方式,它也是jquery采用的方式

第二种方式

var A = function(){
return new A.prototype.init();//①
}
A.prototype = {
init:function(){
this.age = 50;
console.log(this);
return this;
},
age:100
}
 A.prototype.init.prototype = A.prototype;//②
var a = new A();
var b = new A();
console.log(a===b);
console.log(a.age);
console.log(b.age);
b.age = 22;
console.log(a.age);
console.log(b.age);

分析下①和②

①中new A.prototype.init()主要做了三件事

创建一个空对象var obj = {};

obj对象属性_proto_指向函数A.prototype.init的prototype;

将A.prototype.init函数的this替换成obj对象,在调用A.prototype.init函数,A.prototype.init.call(obj),并返回新对象

因为①返回的对象的原型是A.prototype.init.prototype,它和A.prototype并没什么关系,为了使新返回的对象可以继承自A.prototype,所以②让A.prototype.init.prototype指向A.prototype

所以方式二即创建了实例,又保证了各自的作用域独立。

以上所述是小编给大家介绍的Javascript的无new构建实例详解,希望对大家以上帮助,如果大家想了解更多资讯,敬请关注phpstudy网站!



相关阅读:
Linux消息队列编程示例
使用MySQL MySqldump命令导出数据时的注意事项
微软发布Linux Integration Services 4.0 更新下载
JavaScript创建闭包的两种方式的优劣与区别分析
CSS控制让每行显示4个图片的样式
PHP实现在线阅读PDF文件的方法
PHP实现根据时间戳获取周几的方法
JSP学习笔记
MySQL分页技术、6种分页方法总结
Win10 Cortana中惊现Uber 目前还不能正常运行
微信开放平台之网站授权微信登录功能
Java图像处理工具类
javascript从定义到执行 你不知道的那些事
JS判断变量是否为空判断是否null
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 春日·阴阴溪曲绿交加 听一场细雨淋漓,还一片湛然心境 一起久了两个人的性格会逐渐互补(爱情语录) 汶川地震有感作文 经济体制改革回顾:以《商法》为聚焦点(1)论文 市级医院领导就职演讲稿范文 初中初一作文700字:“人蝇”PK 向英雄致敬作文 语文教师自我叙事 清明节的味道 开光仪式讲话稿范文 我的小小心愿作文400字 鼓舞孩子考试的话 每一次发奋努力的背后,必有加倍的赏赐 描写初秋的优美片段五 qq个性签名唯美的诗句 如何强化企业执行力的几点思考 初中初一作文650字:听音乐给我带来快乐 作文 迪斯尼一日游 那把倾斜的伞 2015山中避雨教学反思 学会生存,自我保护_学会生存作文 一样云淡风轻 忘不了的字体450字作文 小学三年级作文450字:植树 高考零分作文:放下顾虑 《春酒》教学设计 《冤案》追踪250字 热病作文3000字 爱心读后感 关于吴邵萍的征文:学习吴邵萍 做平凡的教育人 《悲剧的诞生》读后感1500字 简历范文写作攻略:个人信息该写哪些? 联营合作协议(一) 格列佛游记读后感范文 2011愚人节整人短信10条精选 梦幻雪乡 沙漏记得,我们遗忘的时光 三年级的作文:妈妈,我有话跟你说 班主任经验交流:这样做,班主任更幸福 美丽的珠江公园 乡镇环保所2016年度工作总结及2017年工作计划 心中的栀子花 和语文一起成长作文1000字 学着做家务 小学四年级作文400字:难忘的一件事 (450字) 入党个人鉴定 通用入党申请书格式 △       有 一 种 想 见 不 敢 见 的 冲 动 ° 寒假的一件趣事 黄果树瀑布

Copyright © 2016 phpStudy |