谈谈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 相关文章推荐
不用写JS也能使用EXTJS视频演示
Dec 29 Javascript
js中的window.open返回object的错误的解决方法
Aug 15 Javascript
Javascript load Page,load css,load js实现代码
Mar 31 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
Apr 21 Javascript
JavaScript简单实现网页回到顶部功能
Nov 12 Javascript
js模拟点击以提交表单为例兼容主流浏览器
Nov 29 Javascript
删除Javascript Object中间的key
Nov 18 Javascript
Javascript学习笔记之数组的构造函数
Nov 23 Javascript
node.js中的url.format方法使用说明
Dec 10 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
Apr 30 Javascript
JavaScript中的this关键字使用详解
Aug 14 Javascript
如何使用50行javaScript代码实现简单版的call,apply,bind
Aug 14 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
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
php ZipArchive压缩函数详解实例
2013/11/06 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
提高网站信任度的技巧
2008/10/17 Javascript
JS获取节点的兄弟,父级,子级元素的方法
2014/01/09 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
NodeJS学习笔记之Connect中间件模块(二)
2015/01/27 NodeJs
BootStrap制作导航条实例代码
2016/05/06 Javascript
jquery插件锦集【推荐】
2016/12/16 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
js实现每日签到功能
2018/11/29 Javascript
JavaScript使用小插件实现倒计时的方法讲解
2019/03/11 Javascript
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
JQuery表单元素取值赋值方法总结
2020/05/12 jQuery
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
Python Web框架Flask中使用新浪SAE云存储实例
2015/02/08 Python
python爬取w3shcool的JQuery课程并且保存到本地
2017/04/06 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
python生成九宫格图片
2018/11/19 Python
在Python中字符串、列表、元组、字典之间的相互转换
2019/11/15 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
django使用多个数据库的方法实例
2021/03/04 Python
Linden Leaves官网:新西兰纯净护肤品
2020/12/20 全球购物
星空联盟C# .net笔试题
2014/12/05 面试题
毕业生求职自荐信怎么写
2014/01/08 职场文书
优秀教师事迹简介
2014/02/02 职场文书
《春笋》教学反思
2014/04/15 职场文书
市场营销策划方案
2014/06/11 职场文书
MySQL 覆盖索引的优点
2021/05/19 MySQL
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript
Python利用FlashText算法实现替换字符串
2022/03/31 Python