对象
-
对象字面量/对象直接量
var obj = {} : plainObject
var obj = { name:'wdq', eat:function(){ console.log('I`m eating'); } } obj.name; // 访问属性 obj.eat();// 执行函数
-
构造函数
-
系统自带的构造函数 Object() Array() Number()
var obj = new Object(); obj.name = 'wdq'; obj.eat= function(){ console.log('I`m eating'); }
-
自定义
function Car(){
}
var c = new Car();
c.name = 'wdq';
c.run = function(){}> 和普通的函数没有区别,只是人为的习惯首字母大写(大驼峰式命名规则) 2.1 **属性,函数的设置及初始化** ```js function Car(){ this.name = 'wdq', this.health = 100; this.run = function(){ this.health --; } } var car = new Car(); car.run(); car.health; // 99
-
使用this给Car设置属性及函数,并初始化化
2.2 带参数的构造函数
// 属性,函数有用户决定
function Car(_name,_frun){
// this = {};
this.name = _name,
this.health = 100;
this.run = _frun;
// return this;
}
var car = new Car('BWM',
function(){this.health --;}
);
car.run();
car.health; // 99
上述构造函数原理:会先在函数体前隐式的创建this对象,即 this = {} ,然后执行this.xxx ,最后再return this
包装类型
Boolean,String,Number
- 自动装箱
var num = 123; // (1)
num.len = 2; // (2)自动包装 ,new Number(num).len =2
num.len // (3)undefined
num 为原始值,只有对象才能设置属性
步骤(2)会进行自动包装 ,重新生成对象,执行
new Number(num).len=2
,步骤(3)也会自动包装,生成新的对象,
num.len
不存在,所以
num.len为
undefind`;步骤(2)和(3)生成的是两个不同的对象
-
自动拆箱
var num = new Number(123); num * 2 // 246
num * 2 会将num 隐式的转换成原始值类型,再乘以2