学过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的意义是什么?相关推荐

  1. new操作符到底干了什么?

    前几天无意间发现了刚开始学JavaScript时在知乎写的一些回答,有一个就是讲new操作符到底干了什么.从现在的视角看我当时的回答虽然是正确的,但是在对原理的剖析和细节的理解上还相去甚远.所以借此机 ...

  2. 我这半年到底干了啥(附多家详细面经)

    有现实中的小伙伴问我,我这半年到底干了啥.怎么博客突然不更新了? 最近的一次更新还是在去年12月 其实这半年嘛,一直在为面试做准备.算法一直是我的弱项,于是突击了力扣. 开了会员,刷了将近700道,有 ...

  3. 项目管理课件_项目管理(PMO)工作到底干些啥?

    可能大家都会疑惑,项目管理工作到底干些啥?如何来做价值提升?最近刚好沉淀下来整理一下项目管理的工作,当然还不全面,后续会持续补充. 从我个人经验来理解项目管理,他的工作职责主要是以下几大块(每个公司对 ...

  4. python程序的name的作用是什么_python 中__name__ = '__main__' 的作用,到底干嘛的?

    python 中__name__ = 'main' 的作用,到底干嘛的? 有句话经典的概括了这段代码的意义: "Make a script both importable and execu ...

  5. js学习日记-new Object和Object.create到底干了啥

    function Car () {this.color = "red"; } Car.prototype.sayHi=function(){console.log('你好') }v ...

  6. 前端js框架到底有哪些?

    做前端开发的都知道3大框架:Angular,Vue,React.但是除了这三个框架以外的前端框架还有那些?他们在前端技术的发展中有什么样的作用?哪些网站还在用它们? 下面具体介绍下前端都有那些框架: ...

  7. Pytorch(GPU)配环境原理:cuda+cudnn+pytorch配环境的每一步到底干了些什么?

    作者:18届cyl 时间:2022.5.11 参考文章:https://blog.csdn.net/qq_42406643/article/details/109545766 最近帮舍友配pytorc ...

  8. Tomcat 到底干了啥

    道阻且长,行则将至.请相信我,你一定会更优秀! 此文为Tomcat系列的第一篇,Tomcat的整体架构个人感觉非常有意思,本文我们先非常简单的入个门. 先抛开对 Tomcat 的认识,想一下,如果没有 ...

  9. 将js进行到底:node学习10

    node.js数据库篇--MySQL NoSQL大行其道的如今,MySQL这样的关系型数据库依然有着不可撼动的位置,对于中型,大型面向对象的项目,关系型数据库依然是首选,真正的项目,应当是将数据库的任 ...

  10. pygame.error: font not initialized的解决及init()到底干了什么

    环境 Python3.6.8 pygame1.9.4 贴上报错源码: import pygame my_font = pygame.font.SysFont('arial', 16) my_font ...

最新文章

  1. python读取excel某一行-Python 读取csv的某行
  2. 某些列满足某些条件就被改是什么值,不满足就被改为另外的一些值(python pandas)
  3. Linux如何在系统启动时自动加载模块
  4. 华为云数据库首席架构师:关于数据库他这样说……
  5. 我花了一年时间研究不确定性估算,写下了这份最全指南
  6. 一些关于angular的总结
  7. 前 k 条最短路径算法
  8. 一位算法工程师从30+场秋招面试中总结出的超强面经——目标检测篇(含答案)...
  9. Atitit.js javascript的rpc框架选型
  10. linux下如何使用mysql可视化图形界面客户端查询
  11. 2021-2027全球与中国编码器附件市场现状及未来发展趋势
  12. python TCP服务器v1.4 - 客户端连接服务器异常(异常情况分类)处理
  13. 浏览器如何使用快捷键恢复关闭的网页及关闭当前网页
  14. Volatility工具使用
  15. 计算机主板与检测,主板知识详解:CPU自动检测和硬件错误的侦测
  16. 两台电脑直接连接共享资料
  17. Qt如何支持高分辨率屏幕(高分屏)
  18. 联想e470锁定计算机,联想E470c电脑设置硬盘启动的方法,你值得拥有!
  19. 虚拟机中CentOS 7安装过程
  20. 用SVM来识别魔方颜色(实践篇)

热门文章

  1. hdu 4302 Holedox Eating 线段树去维护蛋糕!! 多校联合赛第三题
  2. poj 2356 Find a multiple dfs 爆搜!!!!
  3. 世界500百强企业中国的CEO对我们的忠告!!!!!我们要告别稚气了
  4. 安装photoshop2022mac遇到安装失败错误代码182解决方法
  5. iPhone卡顿、变慢要如何解决?12 种提升手机顺畅度技巧
  6. 安全彻底的卸载工具App Cleaner Uninstaller for Mac
  7. 如何解决MacOS无法登录app store的问题?
  8. word更改字距调整,让文章更具美感!
  9. Java添加水印文字
  10. 【转】ajax发送请求时候为什么会报拒绝设置不安全的header