JavaScript对象及原型链
一、JS对象
1、对象定义
js对象是引用类型,用于存储键值对
2、对象创建
(1)直接量(字面量):适用于创建单个对象,当要创建多个对象会产生大量重复代码;
var person = {
name:'Tom',
age:20,
}
console.log(person.age);//20
(2)工厂模式:使用函数创建,一般也少用:
function createPerson1(name,age){
var obj = new Object();
obj.name = name;
obj.age = age;
return obj;
}
var person_1 = createPerson1('Tom',30);
console.log(person_1);//{name: "Tom", age: 30}
(3)构造函数模式:
- 系统自带构造函数:
var person_3 = new Object();
person_3.name = 'Tony';
console.log(person_3.name);
- 自定义构造函数:
function Teacher(name,age){
this.name = name;
this.age = age;
}
var teacher_1 = new Teacher('Tom',20);
console.log(teacher_1);//Teacher {name: "Tom", age: 20}
(4)new创建:使用默认构造函数new创建对象
var teacher_2 = new Object();
console.log(teacher_2);//{}
(5)Object.create()创建:括号内参数是对象的原型:
var a = Object.create(new Array(1,2,3,4,5));
console.log(a);//Array {}
console.log(a.length);//5
console.log(a.sort());//Array {0: 1, 1: 2, 2: 3, 3: 4, 4: 5}
var b = Object.create(new String('null'));
console.log(b[3]);//l
3、对象方法:
(1)valueOf():返回当前对象的原始值,但是Math、Error对象是没有valueOf()方法的;
- Array:返回数组实例
- Boolean:返回布尔值
- Date:返回截止目前的毫秒值
- 函数:函数本身
- Number:数字值
- Object:对象本身
- String:字符串本身
(2)toString()方法:返回当前对象对应的字符串格式:
- Array:将数组转换为字符串并连接起来使用逗号分隔
- Boolean:true返回"true",否则"false"
- Date:返回日期文本表示样式
- Error:返回一个包含错误信息的字符串
- 函数:返回function functionName() { [native code] }
- Number:范湖数字的文本表示样式
- String:返回String对象值
- Object:返回object Object
(3)valueOf和toString的区别:
- valueOf偏向于计算,toString偏向于显示
- 进行强制转换字符串时优先调用toString,强转为数字时优先调用valueOf()
- 在有运算符的情况下,valueOf()的优先级高于toString()
4、对象属性
(1)定义和修改属性Object.defineProperty():
- 语法:Object.defineProperty(obj, prop, descriptor)
- 参数:obj 需要定义属性的对象;obj 需要定义属性的对象;descriptor 需被定义或修改的属性的描述符,是一个对象形式;
var person = {
name: 'yourname',
age: 10
};
Object.defineProperty(person, "sex", {
value: "male",
enumerable: false //不可枚举
});
(2)检测属性:
- in:检查一个属性是否属于某个对象,包括继承来的属性;
var obj = {
name:'Tom',
age:20
}
console.log('age' in obj);//true
console.log('say' in obj);//false
- hasOwnProperty():检查一个属性是否属于某个对象自有属性,不包括继承来的属性;
var person =