对象
对象的创建方法
1,(plainObject )对象字面量 | | 对象直接量,var obj={ },
var mrWang = {
name: ' wang',
age: 40,
sex: 'male',
health: 100,
energy: 100,
drink: function() {
console.log('I am drinking');
this.health--; //控制台打印只有返回值才有结果 没有返回值就是underfined
},
run: function() {
console.log('I am runing');
this.energy--; //控制台打印只有返回值才有结果 没有返回值就是underfined
}
};
对象的增
mrWang.wife = '刘美女'; //对象的属性值字符串最好要用''表示,为了和后端更好配合
对象的删
delete mrWang.age
console.log(mrWang.age) //undefine d 知识点:未声明的变量使用时 会报错 。
//访问对象的未设置的属性 结果是undefined。
2,构造函数
1)系统自带的构造函数
Object()。new object()结果就是一个对象,用一个变量去接受,就能为一个对象 var obj=new Object()。Object相当于工厂,每次创建的新对象都是独一无二且独立的。
2)自定义
大驼峰(例如:TheFirstName,小驼峰:theFirstname) 和普通函数不一样就是命名不同。
构造函数内部原理:三部曲:1,在函数体最前面隐式的加上this={}2,执行this.XXX=XXX。3,隐式的返回this。
function Student(name, height) {
// 1,var this={ }
this.name = name;
this.height = height;
this.energy = 100;
this.run = function() {
this.energy--;
};
// 2,执行this.xxx=xxx;
// 若在隐式执行前 显示的返回{},this.run的下面添加 return {},那var person=new Student的结果是 person={}。
// 如果隐式执行前,添加的是 return 123,var person=new Student正常执行。原始值不影响结果。
}
包装类:String();Boolean();Number();
var num = new Number(123);
var str = new String('abc');
var bol = new Boolean('true');
原始值是不能有属性和方法的 ,经过包装类后才能有属性和方法。如以下案例的解析(数字):
var num = 6;
num.len = 2;
// 隐士执行 new Number(6).len=3; delete 。
console.log(num.len); //undefined
// 重新为num添加属性,不会报错,但是这个属性没有值 因此结果是undefined。
num是原始值没有属性和方法的 ,为其添加属性和方法时不会报错,但,新建数字对象,隐式将其包装后添加属性 最后删除。删除完后num.len就不存在 无法访问了。
再有如下案例(字符串):
var str = 'abcd';
str.length = 2; //new String('abcd').length=2; delete 因此不会报错
console.log(str.length); //4.
//new String('abcd').length.对象字符串有length属性,
var str = 'abc';
str += 1; //'abc1'
var test = typeof(str); //typeof(str)='string',test='string'
if (test.length == 6) {
test.sign = "typeof的返回结果可能为String";
// new String('string').sign=xxx; delete
}
console.log(test.sign); // 结果是 undefined
// 重新 new String('string').sign 。但是没有值