谈谈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 相关文章推荐
javascript获取当前ip的代码
May 10 Javascript
javascript 判断数组是否已包含了某个元素的函数
May 30 Javascript
javascript日期转换 时间戳转日期格式
Nov 05 Javascript
javascript学习笔记(十一) 正则表达式介绍
Jun 20 Javascript
js淡入淡出焦点图幻灯片效果代码分享
Sep 08 Javascript
JavaScript中访问id对象 属性的方式访问属性(实例代码)
Oct 28 Javascript
详解解决使用axios发送json后台接收不到的问题
Jun 27 Javascript
ionic3双击返回退出应用的方法
Sep 17 Javascript
vue源码中的检测方法的实现
Sep 26 Javascript
小程序调用微信支付的方法
Sep 26 Javascript
小程序新版订阅消息模板消息
Dec 31 Javascript
QT与javascript交互数据的实现
May 26 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
PHP与MySQL开发中页面出现乱码的一种解决方法
2007/07/29 PHP
解析php类的注册与自动加载
2013/07/05 PHP
Php output buffering缓存及程序缓存深入解析
2013/07/15 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
PHP session垃圾回收机制实例分析
2019/06/28 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
script的async属性以非阻塞的模式加载脚本
2013/01/15 Javascript
jquery.cookie() 方法的使用(读取、写入、删除)
2013/12/05 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
2016/07/13 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
2019/10/23 Javascript
ES6中new Function()语法及应用实例分析
2020/02/19 Javascript
深入讲解Python中面向对象编程的相关知识
2015/05/25 Python
python追加元素到列表的方法
2015/07/28 Python
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
Python自定义一个异常类的方法
2019/06/27 Python
python读写配置文件操作示例
2019/07/03 Python
python实现人机五子棋
2020/03/25 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
深入理解HTML的FormData对象
2016/05/17 HTML / CSS
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
大专学生求职信
2014/07/04 职场文书
大学同学会活动方案
2014/08/20 职场文书
安全教育观后感
2015/06/17 职场文书
校运会宣传稿大全
2015/07/23 职场文书
《跨越海峡的生命桥》教学反思
2016/02/18 职场文书
Golang表示枚举类型的详细讲解
2021/09/04 Golang