谈谈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 相关文章推荐
只需20行代码就可以写出CSS覆盖率测试脚本
Apr 24 Javascript
JavaScript中的运算符种类及其规则介绍
Sep 26 Javascript
javascript获取当前鼠标坐标的方法
Jan 10 Javascript
原生Js实现简易烟花爆炸效果的方法
Mar 20 Javascript
JS实现从网页顶部掉下弹出层效果的方法
Aug 06 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
Sep 27 Javascript
详解AngularJS验证、过滤器、指令
Jan 04 Javascript
jquery广告无缝轮播实例
Jan 05 Javascript
vuejs实现折叠面板展开收缩动画效果
Sep 06 Javascript
vue的全局变量和全局拦截请求器的示例代码
Sep 13 Javascript
layui 实现表单和文件上传一起传到后台的例子
Sep 16 Javascript
JS实现贪吃蛇游戏
Nov 15 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
使用 PHPStorm 开发 Laravel
2015/03/24 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
2015/11/04 PHP
php解决和避免form表单重复提交的几种方法
2016/08/31 PHP
ThinkPHP实现简单登陆功能
2017/04/28 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
2017/05/20 PHP
php文件操作之文件写入字符串、数组的方法分析
2019/04/15 PHP
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
JavaScript类库D
2010/10/24 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
2013/02/26 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
js实现简单div拖拽功能实例
2015/05/12 Javascript
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
微信小程序 数组(增,删,改,查)等操作实例详解
2017/01/05 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
Angular8 简单表单验证的实现示例
2020/06/03 Javascript
[03:01]2014DOTA2国际邀请赛 DC:我是核弹粉,为Burning和国土祝福
2014/07/13 DOTA
Python的另外几种语言实现
2015/01/29 Python
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
在Python中构建增广矩阵的实现方法
2019/07/01 Python
Python Pandas中根据列的值选取多行数据
2019/07/08 Python
python数组循环处理方法
2019/08/26 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
三年大学自我鉴定
2014/01/16 职场文书
个人借款担保书
2014/04/02 职场文书
超市客服工作职责
2014/06/11 职场文书
在职证明书范本(2014新版)
2014/09/25 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
员工升职自荐信
2015/03/27 职场文书
行为习惯主题班会
2015/08/14 职场文书
追悼会答谢词范文
2015/09/29 职场文书
大学生社区义工服务心得体会
2016/01/22 职场文书
90条交通安全宣传标语
2019/10/12 职场文书
Python中的np.argmin()和np.argmax()函数用法
2021/06/02 Python
Golang Elasticsearches 批量修改查询及发送MQ
2022/04/19 Golang
ant design vue的form表单取值方法
2022/06/01 Vue.js