js new到底干了什么,new的意义是什么?
学过JS的都知道 创建对象可以这样
var obj=new Object();
var obj=new Function();
用内置的函数对象来构造对象
还可以这样自定义函数
function test(){}
var baby=new test();
于是这时候有了一个疑问
console.log(typeof test);//function
返回的是一个function类型
console.log(typeof baby);//object
为什么这样捏?
那就是new 在搞事情呗,baby是object类型,那不就是说,后台创建了一个对象并且赋给了baby
让我们在test函数里面加点佐料继续验证
function test(name){
this.name=name;
this.say=function(){
return this.name+"吹牛逼说自己最帅"!
}
}
var baby=new test("xjz");
console.log(baby.name);//xjz
console.log(baby.say());//xjz吹牛逼说自己最帅!
//属性和方法都添加到自动创建的那个对象身上了
到现在为止new 干了三件事
1.var obj={};//创建一个对象
2.this.name=name;this.say=funcion(){return this.name+"吹牛逼说自己最帅!"};
在普通函数里面的this是window对象
所以得改变this指向来给obj添加属性和方法 test.call(obj); 吧test函数里面的this改变成obj
所以你this.name=name 不就是 obj.name=name; 这样明白了吧!!
3 把obj的地址赋值给等式左边的变量
接下来得需要原型链方面的知识了,我后续后写原型链方面的知识。
1.function出来的函数会自动添加一个prototype原型对象( 他上面的属性和方法只有一份并且所有实例共享)
2.object对象都有内置的原型对象__proto__注意是两个_(我在这里吃过亏哈哈)
3.并且obj.__proto__指向它的构造函数的prototype对象
4.obj.__proto__就是一个(地址)根据它可以找到它构造函数的prototype对象
obj.__proto__=itsConstructor.prototype;//itsConstructor(它的构造函数的意思)
5.这样当obj的里面没有你想要的属性和方法的时候,它会顺着原型链一级一级向上查找,直到找到你想要的方法时或者为null时才停止
6这里介绍下吧 如果不了解原型链这个东西会一脸懵逼吧
假设 console.log(baby.run());
baby里是没有run方法的
然后会根据baby.__proto__找到baby.prototype(依然没有)
因为prototype也是对象(你们typeof一下就知道了)所以也有__proto__属性
baby.prototype.__proto__----->找到了Object.prototype(依然没有)
因为prototype是对象 当然是Object构造的了 Object.prototype是所有对象的祖先
Object.prototype.__proto__==null 到此为止原型链终止
让我们给prototype对象添加一个方法,如果能使用就说明baby.__proro__=test.prototype;
test.prototype.look=function(){
return this.name+"正在看美女!";
}
console.log(baby.look());//xjz正在看美女 成功访问到了
于是乎 new 很神奇的就干了这件事
obj.__proto__=test.prototype;
于是那句话obj.__proto__指向它的构造函数的prototype对象这个概念就知道怎么来的了
实在new的过程实现的
所以综上所述
new 干了四件事
1.var obj={};
2.obj.__proto__=test.prototype;
3.test.call(obj);
4把obj的地址赋值给等式左边的变量
我认为new的意义在于节省代码,相当于语法糖,还有就是它可以拥使用构造函数里面的所有属性和方法
并且还可以扩展。
也不知道看了的人能不能明白。。。你得看原型和原型链 要不不会很理解的
this和作用域也可以看看
转载于:https://www.cnblogs.com/liveoutfun/p/8735992.html
js new到底干了什么,new的意义是什么?相关推荐
- new操作符到底干了什么?
前几天无意间发现了刚开始学JavaScript时在知乎写的一些回答,有一个就是讲new操作符到底干了什么.从现在的视角看我当时的回答虽然是正确的,但是在对原理的剖析和细节的理解上还相去甚远.所以借此机 ...
- 我这半年到底干了啥(附多家详细面经)
有现实中的小伙伴问我,我这半年到底干了啥.怎么博客突然不更新了? 最近的一次更新还是在去年12月 其实这半年嘛,一直在为面试做准备.算法一直是我的弱项,于是突击了力扣. 开了会员,刷了将近700道,有 ...
- 项目管理课件_项目管理(PMO)工作到底干些啥?
可能大家都会疑惑,项目管理工作到底干些啥?如何来做价值提升?最近刚好沉淀下来整理一下项目管理的工作,当然还不全面,后续会持续补充. 从我个人经验来理解项目管理,他的工作职责主要是以下几大块(每个公司对 ...
- python程序的name的作用是什么_python 中__name__ = '__main__' 的作用,到底干嘛的?
python 中__name__ = 'main' 的作用,到底干嘛的? 有句话经典的概括了这段代码的意义: "Make a script both importable and execu ...
- js学习日记-new Object和Object.create到底干了啥
function Car () {this.color = "red"; } Car.prototype.sayHi=function(){console.log('你好') }v ...
- 前端js框架到底有哪些?
做前端开发的都知道3大框架:Angular,Vue,React.但是除了这三个框架以外的前端框架还有那些?他们在前端技术的发展中有什么样的作用?哪些网站还在用它们? 下面具体介绍下前端都有那些框架: ...
- Pytorch(GPU)配环境原理:cuda+cudnn+pytorch配环境的每一步到底干了些什么?
作者:18届cyl 时间:2022.5.11 参考文章:https://blog.csdn.net/qq_42406643/article/details/109545766 最近帮舍友配pytorc ...
- Tomcat 到底干了啥
道阻且长,行则将至.请相信我,你一定会更优秀! 此文为Tomcat系列的第一篇,Tomcat的整体架构个人感觉非常有意思,本文我们先非常简单的入个门. 先抛开对 Tomcat 的认识,想一下,如果没有 ...
- 将js进行到底:node学习10
node.js数据库篇--MySQL NoSQL大行其道的如今,MySQL这样的关系型数据库依然有着不可撼动的位置,对于中型,大型面向对象的项目,关系型数据库依然是首选,真正的项目,应当是将数据库的任 ...
- pygame.error: font not initialized的解决及init()到底干了什么
环境 Python3.6.8 pygame1.9.4 贴上报错源码: import pygame my_font = pygame.font.SysFont('arial', 16) my_font ...
最新文章
- python读取excel某一行-Python 读取csv的某行
- 某些列满足某些条件就被改是什么值,不满足就被改为另外的一些值(python pandas)
- Linux如何在系统启动时自动加载模块
- 华为云数据库首席架构师:关于数据库他这样说……
- 我花了一年时间研究不确定性估算,写下了这份最全指南
- 一些关于angular的总结
- 前 k 条最短路径算法
- 一位算法工程师从30+场秋招面试中总结出的超强面经——目标检测篇(含答案)...
- Atitit.js javascript的rpc框架选型
- linux下如何使用mysql可视化图形界面客户端查询
- 2021-2027全球与中国编码器附件市场现状及未来发展趋势
- python TCP服务器v1.4 - 客户端连接服务器异常(异常情况分类)处理
- 浏览器如何使用快捷键恢复关闭的网页及关闭当前网页
- Volatility工具使用
- 计算机主板与检测,主板知识详解:CPU自动检测和硬件错误的侦测
- 两台电脑直接连接共享资料
- Qt如何支持高分辨率屏幕(高分屏)
- 联想e470锁定计算机,联想E470c电脑设置硬盘启动的方法,你值得拥有!
- 虚拟机中CentOS 7安装过程
- 用SVM来识别魔方颜色(实践篇)
热门文章
- hdu 4302 Holedox Eating 线段树去维护蛋糕!! 多校联合赛第三题
- poj 2356 Find a multiple dfs 爆搜!!!!
- 世界500百强企业中国的CEO对我们的忠告!!!!!我们要告别稚气了
- 安装photoshop2022mac遇到安装失败错误代码182解决方法
- iPhone卡顿、变慢要如何解决?12 种提升手机顺畅度技巧
- 安全彻底的卸载工具App Cleaner Uninstaller for Mac
- 如何解决MacOS无法登录app store的问题?
- word更改字距调整,让文章更具美感!
- Java添加水印文字
- 【转】ajax发送请求时候为什么会报拒绝设置不安全的header