javaScript面向对象编程之Object 对象
JavaScript为Object
对象,提供了很多面向对象编程的相关操作。
1. Object.getPrototypeOf()
Object.getPrototypeOf()
是JavaScript提供的标准的获取对象的原型对象的方法。
function F(x){
this.x = x;
}
var f = new F(1);
Object.getPrototypeOf(f) === F.prototype; // true
有几种对象的原型比较特殊:
- 空对象的原型是
Object.prototype
Object.prototype
的原型是null
null
没有自己的原型对象。
Object.getPrototypeOf({}) === Object.prototype; // true
Object.getPrototypeOf(Object.prototype) === null; // true
2. Object.setPrototypeOf()
可以获取对象的原型对象,也就可以设置对象的原型对象。Object.setPrototypeOf
给参数对象设置原型,返回该参数对象。它接受两个参数,第一个是现有对象,第二个是原型对象。
var a = {};
var b = {x: 12};
Object.getPrototypeOf(a) === b; //false
// 设置原型对象
Object.setPrototypeOf(a, b);
Object.getPrototypeOf(a) === b; // true
a.x; // 12
上述代码中,把对象b
设置为对象a
的原型对象,对象a
就能共享对象b
的属性。
3. Object.create()
JavaScript提供了Object.create()
方法,使得能从一个实例对象生成另一个实例对象。此方法接受一个对象作为参数,然后会以该对象作为原型,生成一个新实例对象并返回新的实例对象。新实例对象完全继承参数对象的属性。
var A = {
x: "jidi";
}
var b = Object.create(A);
Object.getPrototypeOf(b) === A; // true
b.x; // "jidi"
b.x === A.x; // true
如果要生成一个没有任何属性的对象,可以将Object.create()
的参数设置为null
。
Object.create()
方法还可以接受一个属性描述对象作为第二个参数。该属性描述对象描述的属性,会作为实例对象自身的属性。
var object = Object.create({}, {
name: {
value: "jidi",
enumerable: true,
writable: true,
configurable: true
},
age: {
value: 22,
enumerable: true,
writable: true,
configurable: true
}
}
)
object; // {name: "jidi", age: 22}
注意:Object.create()
方法的参数不能为空,且必须是对象,否则报错;Object.create()
方法生成的新对象,动态继承了原型对象。在原型对象上对属性的操作,会立刻反映在新对象之上;Object.create()
方法生成的对象,继承了它的原型对象的构造函数。
4. Object.prototype.isPrototypeOf()
Object.prototype.isPrototypeOf()
判断该实例对象是否是参数对象的原型。只要实例对象在参数对象的原型链上,都会返回true
。
var o1 = {};
var o2 = Object.create(o1);
var o3 = Object.create(o2);
o2.isPrototypeOf(o3) // true
o1.isPrototypeOf(o3) // true
5. Object.getOwnPropertyNames()
Object.getOwnPropertyNames()
方法返回一个数组,成员是参数对象本身的所有属性的键名,不包含继承的属性键名。
Object.getOwnPropertyNames(String); // ["length", "name", "prototype", "fromCharCode", "fromCodePoint", "raw"]
6. Object.prototype.hasOwnProperty()
Object.prototype.hasOwnProperty()
返回一个布尔值,用于判断某个属性定义在对象自身,还是定义在原型链上。
Date.hasOwnProperty('length') // true
Date.hasOwnProperty('toString') // false
注意:Object.prototype.hasOwnProperty()
方法是 JavaScript 之中唯一一个处理对象属性时,不会遍历原型链的方法。
7. in 运算符
in
运算符返回一个布尔值,表示一个对象是否具有某个属性。它不会区分该属性是对象自身的属性,还是继承的属性。
var x ={
a: {
value: "jidi",
writable: true,
enumerable: true,
configurable: true
}
};
"a" in x; // true
"b" in x; // false
8. 参考链接
本博客是自己学习笔记,原文请参考JavaScript教程。
如有问题,请及时指出!
欢迎沟通交流,邮箱:[email protected]。