谈谈JavaScript的New关键字


Posted in Javascript onAugust 26, 2016

原型和闭包算是JavaScript中最常见,最难以理解,最容易被当做问题的两个部分,当然还有它们的延伸,如作用域链,继承等等吧,我最近也是各种看,各种翻,记录点自己的心得,写写总会让自己的理解更深一些。(跟标题的关系不大啦,就感慨句,每次总感觉自己懂了,再翻还是收获满满)

先谈一下JavaScript中New关键字吧,通常我们通过它来创建一个类的实例对象,在JavaScript中,实例化对象之后,也就继承了类的属性以及方法。通过代码来演示一下 

function Person(name){
 this.name = name;
}
Person.age= "23";
Person.prototype.say = function(){
 console.log("I'm " + this.name);
};
var person= new Person("王方");
 
console.log(
 person.name, //王方
 person.height //undefined
);
person.say(); //I'm 王方
 
console.log(
 Person.name, //Person
 Person.age//23
);
Person.say(); //Person.say is not a function

我们看下这一行 
var person= new Person("王方");
new 到底做了什么呢?恩 JS引擎做的工作就是下面这样  

var obj = {};
obj.__proto__ = Person.prototype;
var result = Person.call(obj,"王方");
return typeof result === 'obj'? result : obj;

1.首先创建一个新对象 

2.把obj的__proto__ 指向Person的原型对象prototype,此时便建立了obj对象的原型链:obj->Person.prototype->Object.prototype->null 

3.在obj对象的执行空间调用Person函数并传递参数“王方”。 相当于var result = obj.Person("王方")。当这句执行完之后,obj便产生了属性name并赋值为"王方"。 

4.判断返回值,如果无返回值或者返回一个非对象值,就将obj返回,否则讲返回值作为新对象返回(有点绕口,三元运算符,自己看下吧) 

总结:
 Javascript的new关键字主要的作用是继承,如上例子所言,但是要记住一点,Person是一个函数,而person是一个对象,至于函数与对象之间的区别,我有时间再写吧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery dialog键盘事件代码
Aug 01 Javascript
js不完美解决click和dblclick事件冲突问题
Jul 16 Javascript
模拟一个类似百度google的模糊搜索下拉列表
Apr 15 Javascript
JS限制文本框只能输入数字和字母方法
Feb 28 Javascript
jQuery实现图片渐入渐出切换展示效果
Aug 15 Javascript
canvas绘制万花筒效果(代码分享)
Jan 20 Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
Aug 25 Javascript
解决vue同一slot在组件中渲染多次的问题
Sep 06 Javascript
layer关闭弹出窗口触发表单提交问题的处理方法
Sep 25 Javascript
js基于canvas实现时钟组件
Feb 07 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
Feb 24 Javascript
canvas多重阴影发光效果实现
Apr 20 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
Aug 26 #Javascript
针对JavaScript中this指向的简单理解
Aug 26 #Javascript
轻松掌握JavaScript代理模式
Aug 26 #Javascript
轻松掌握JavaScript单例模式
Aug 25 #Javascript
很酷的星级评分系统原生JS实现
Aug 25 #Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
Aug 25 #Javascript
轻松掌握JavaScript策略模式
Aug 25 #Javascript
You might like
phpwind中的数据库操作类
2007/01/02 PHP
php一个找二层目录的小东东
2012/08/02 PHP
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
php实现以只读方式打开文件的方法
2015/03/16 PHP
PHP的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
浅谈Javascript鼠标和滚轮事件
2012/06/27 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
解决js中window.open弹出的是上次的缓存页面问题
2013/12/29 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
angular双向绑定模拟探索
2016/12/26 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
小程序绑定用户方案优化小结
2019/05/15 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
python有证书的加密解密实现方法
2014/11/19 Python
python实现备份目录的方法
2015/08/03 Python
python简单商城购物车实例代码
2018/03/15 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
在主流系统之上安装Pygame的方法
2020/05/20 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
2020/06/28 Python
python统计mysql数据量变化并调用接口告警的示例代码
2020/09/21 Python
党员年终民主评议的自我评价
2013/11/05 职场文书
薪酬专员岗位职责
2014/02/18 职场文书
高校教师自荐信范文
2014/03/13 职场文书
珍惜时间演讲稿
2014/05/14 职场文书
致800米运动员广播稿(10篇)
2014/10/17 职场文书
教师考核评语大全
2014/12/31 职场文书
银行柜员工作心得体会
2016/01/23 职场文书
学者《孟子》名人名言
2019/08/09 职场文书
vue中三级导航的菜单权限控制
2021/03/31 Vue.js