用已学到的知识点,描述一下你心目中的对象
var obj = {
name: 'laura',
age: '30',
sayHello: function() {
console.log("Hello, " + this.name);
}
}
【属性的增、删、改、查】
增:(对象.属性)
obj.son
查:(对象.属性)
obj.name
改:(对象.属性 = 值)
obj.name = 'zz'
删:(delete 对象.属性)
delete obj.name
- 字面量(对象字面量/吃饭请假直接量)
var obj = {}
- 构造函数
- 系统自带(Object()、Array()、Boolean()、Number()、Date())
var obj = new Object();obj.name = 'laura';obj.age = '30';
- 自定义(大驼峰式命名规则,普通函数是小驼峰式——开发规范)
function Car(color) {
this.color = color;
this.name = 'BMW';
this.height = '1400';
this.lang = '4900';
this.weight = 1000;
this.health = 100;
this.run = function() {
this.health --;
}
}
var car= new Car('red');
var car1= new Car('green');
//car,car1彼此独立
- Object.create(原型)方法
Object.create(prototype, definedProperty)
构造函数内部原理(new之后)
1)在函数体最前面隐式的加上this = {}
2)执行this.xxx = xxx
3)隐式的返回this
模拟构造函数
function Person(name, height) {
var that = {};
that.name = name;
that.height = height;
return that
}
var person = Person('zz',180);(这里直接按三段论创建了构造函数,所以可以不用再new了)
【注意】
function Person(name, height){
this.name = name;
this.height = height;
return {}
}
var person = new Person('aa',180);
var person1 = new Person('bb',180);
==>因为上面重新显式的返回了空对象{},所以最后即使new吧,person和person1也还是空对象{}
function Person(name, height){
this.name = name;
this.height = height;
return 123
}
var person = new Person('aa',180);
var person1 = new Person('bb',180);
==>虽然上面显式的返回了123,对new之后的结果没有影响,person和person1还是对象{}(浏览器默认只要是new的构造函数,一律返回的是对象,即使显式返回原始值也没有用)
【包装类】
(原始值数字、原始值字符串。。。,原始值不能设置属性和方法)
var num = new Number(123),这种是构造函数对象123了,可以有属性和方法,也可以像数字那样进行运算
var str= new String('abc'),这种是字符串函数对象abc了,可以有属性和方法
var bol = new Boolean(false);
为什么有些原始值可以设置属性方法(如字符串对象、数字对象、布尔对象等),是因为有包装类
var num = 4;
num.len = 3; //new Number(4).len = 3; delete,是因为经过了包装类,然后又删掉了
num.len; // undefined(因为删掉了,所以访问的时候又没有len了)
var str = 'abcd';
str.length = 2; // new String('abcd').length = 2; delete
str; //abcd
str.length; // 4(new String('abcd').length,字符串也有自带length属性)