ECMAScript-9 【构造函数原理-实例化原理-包装类】

本文深入探讨JavaScript中的构造函数,解释`this`指向变化和实例化过程,并通过实例解析其工作原理。同时,文章介绍了JavaScript的包装类概念,展示了如何将原始值转换为对象并设置属性和方法。此外,还讨论了返回不同类型值对构造函数的影响。最后,通过示例展示了包装类在运算中的行为以及如何利用包装类为原始值添加属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.构造函数原理、实例化原理

(1).this指向说明

没有被实例化之前this指向的是window实例化过后指向的是对象而不是构造函数本身

而对象中的this是指向自己的

function Car(color,brand){
	this.color=color;
	this.brand=brand;
}
var car1=new Car('red','Benz');
var car2=new Car('black','Mazda');
console.log(car1.color)//red
console.log(car2.color)//black

(2).步骤说明

function Car(color,brand){
    //this:{
     //   color:color,
    //    brand:brand
   // }
	this.color=color;
	this.brand=brand;
 //return this;
}
var car1=new Car('red','Benz');-->this
console.log(car1.color);

开始定义的时候GO定义一个Car,然后看到new后在Car的Ao中产生this,等执行完this如上方一样被赋

值完毕this就指向了car1,在GO的car1中也就有了数据,所以才能通过car1.color访问到。

其中new的作用其实就是return this,改变了this的指向

同上方的道理手写模拟一下构造函数(不用this):

function Car(color,brand){
    var me={}
    me.color=color;
    me.brand=brand;
    return me;
}
var car1= Car('red','Benz');-->this
var c = c
console.log(car1.color);

(3).拓展

return 'abc'返回red 你无法自己return干扰 他最后还是return了个this

function Car(color,brand){
    this.color=color;
    this.brand=brand;
    return 'abc';
}
var car1= new Car('red','Benz');
console.log(car1.color);

return {}返回undefined 干扰成功了

function Car(color,brand){
    this.color=color;
    this.brand=brand;
    return {};
}
var car1=new Car('red','Benz');
console.log(car1.color);

所以你return 引用类型是有用的,你return值类型是没用的

二.包装类

(1).包装类示例

原始值没有自己的方法和属性

当一个数字经过了 new Number 就会成为一个对象 理所当然的就可以设置对应的属性和方法

var a=1;//原始值
console.log(a);
var b=new Number(a);
b.len=1;
b.add=function(){
    console.log(1);
}
console.log(b.len);//1

(2).包装类参与运算

经过包装后参与了运算返回了原始值

var a=1;
console.log(a);//1

var aa=new Number(1);
console.log(aa);//Number{[[PrimitiveValue]]:1}

aa.name='aa';
console.log(aa);//Number{[[PrimitiveValue]]:1,name:"aa"}

var bb=aa+1;
console.log(bb);//2
console.log(aa)//Number{[[PrimitiveValue]]:1,name:"aa"}

(3).三个内置系统构造函数

  1. new Number
  2. new String
  3. new Boolean

(4).值的包装

undefined和null以及原始值是设置不了任何属性或方法的下面输出undefined

var a=123;
a.len=3;
console.log(a.len);//undefined
//过程为系统自动给new Number(123).len=3 然后没地方存储 最后delete

这个输出3

var str='abc';
console.log(str.length);//输出3

因为String原有length

接上方String例子

var str='abc';
str.length=1;
console.log(str.length);//输出3
//过程为系统自动给new String(abc).len=3 然后没地方存储 最后delete 然后又new了个String

undefined和null没有自己的原型并且不能被包装类转化为对象

(5).示例练习

+

var name="languigui";
name+=10;
var type=typeof(name);
if(type.length===6){
    type.text='string';
}
console.log(type.text)
//输出undefined

如果硬要输出:

var name="languigui";
name+=10;
var type=new String(typeof(name));
if(type.length===6){
    type.text='string';
}
console.log(type.text)
//输出string

//以上都进判断了,不同的地方只是type通过系统自带函数变成了包装类,可以添加属性了而已

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值