一.构造函数原理、实例化原理
(1).this指向说明
没有被实例化之前this指向的是window,实例化过后指向的是对象而不是构造函数本身
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的指向
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);
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).三个内置系统构造函数
(4).值的包装
undefined和null以及原始值是设置不了任何属性或方法的下面输出undefined
var a=123;
a.len=3;
console.log(a.len);//undefined
//过程为系统自动给new Number(123).len=3 然后没地方存储 最后delete
var str='abc';
console.log(str.length);//输出3
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