目录
对象
跟C++类似,属性和方法的集合;
语法如下:
var person = {
name:"xiaoMing",
age:18,
sex:"male",
health:100,
smoke: function(){
console.log("i am smoking");
this.health--;
},
exercise: function(){
console.log("i am running");
this.health++;
}
}
console.log(person.health);
person.smoke();
console.log(person.health);
person.exercise();
console.log(person.health);
1.对象的增删改查
接着上面的例子:
增,直接加即可
person.height = "175cm";
console.log(person.height);
查,上面也写了,就是直接调,这里就忽略不写了;
改,同理,就是调用赋值即可,忽略;
删(需要用到 delete)
console.log(person.age);//18
delete person.age;
console.log(person.age);//返回undefined,不报错
2.对象的创建方法
如下:
//1. var obj = {} plainObject 对象字面量/对象直接量
//2.构造函数(两种方法)
// 1) 系统自带的构造函数 Object()
// 2) 自定义
//new + 系统自带的构造函数 产生对象,和 var obj = {} 没有任何区别
var obj = new Object();
obj.name = 'abc';
obj.sex = 'male';
obj.say = function(){
}
3.构造函数
写法跟函数一样;(为了方便维护,区分与一般函数区别,所以取名方式一般为 大驼峰命名规则)
function person(){
}
var person1 = new person;
person1.name = 'abc';
console.log(person1);
例:
function person(name, age, sex){
this.name = name;
this.age = age;
this.sex = sex;
}
var student = new person('zhangsna',18,'male');
包装类
看下面这段代码
var num = 4;
num.len = 3;
console.log(num.len); //打印undefined
这里 num 被赋予了 123,然而第二句 直接再加一个属性后,第三句打印竟然出现 undefined;
需要注意的是,js中原始值是没有属性和方法的,所以在这几行代码中,肯定经历了一个过程,即:包装类
过程如下:
//包装类
var num = 4;
num.len = 3;
//new Number(4).len = 3;
//delete
//new Number(4).len
console.log(num.len); //打印undefined
当代码运行到第二句时,系统发现 num 不是一个对象,所以 系统会自动创建一个对象,并给它的属性 len 赋为 3,然后delete销毁这个对象;
当代码运行到第三句,系统发现一个不是对象的原始值在调用方法,那么善良的系统还是会创建一个对象,但是此对象并非第二句代码的对象,所以是undefined;
举例:
var str = 'abcd';
str.length = 2;
console.log(str);//打印abcd
//new String('abcd').length
console.log(str.length);//打印4
这里第二行代码就是包装类的过程,不影响后面的代码