首页 > 代码库 > new到底做了什么?
new到底做了什么?
下面是一个实例化自定义的对象,我们将要对他进行分析
//定义构造函数function A(){ this.b = 1 //在这个对象里增加一个属性 //不可以拥有返回对象的return语句}var obj = new A() //实例化一个对象console.log(obj) //{ b: 1 }
在这个过程中new到底做了什么?
下面针对分析new A():
1.构造函数拥有一个叫prototype的属性,这里即A.prototype,这个对象默认有一个属性constructor,他的值是这个构造函数a。
2.javascript先创建一个空对象,先叫它做临时对象,它继承A.prototype的所有属性。
3.当A()执行完毕,再设置这个临时对象的属性this,值为A
4.如果没有返回语句,或者是返回对象的语句,那么返回的就是这个临时对象,否则返回的我们返回的对象。
当由构造函数进行对象实例化时,返回的对象是继承的谁?
先给出准确的解释
1.当没有返回语句,或者返回对象的语句时,返回的对象继承自a.prototype。
2.当返回的是一个对象时,主义,返回的对象是我们自己创建的对象,所以它继承自它构造函数的原型。
没有返回对象时:
//没有返回对象时function A(){ this.b = 1}var obj = new A() console.log(Object.getPrototypeOf(obj) === A.prototype) //true
有返回对象时
//返回对象时function A(){ return { b:1}}var obj = new A() console.log(Object.getPrototypeOf(obj) === A.prototype) //trueconsole.log(Object.getPrototypeOf(obj) === Object.prototype) //true
对已经实例化的对象的构造函数原型进行修改时,并不影响这个实例化对象
这里有一个实例可以说明这个现象
function A(){ this.b = 1}var obj = new A() A.prototype = {b:10}console.log(obj.b) //1
new到底做了什么?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。