javaScript面向对象编程之Object 对象

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

有几种对象的原型比较特殊:

  1. 空对象的原型是Object.prototype
  2. Object.prototype的原型是null
  3. 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]

发布了7 篇原创文章 · 获赞 3 · 访问量 2091

猜你喜欢

转载自blog.csdn.net/qq_41863849/article/details/103970916