Object.getPrototypeOf()
这个方法返回参数对象那个的原型
function fn(){}
var f = new fn()
Object.getPrototypeOf(f) === fn.prototype
注意几个特殊对象的原型
// 空对象的原型是 Object.prototype
Object.getPrototypeOf({}) === Object.prototype // true
// Object.prototype 的原型是 null
Object.getPrototypeOf(Object.prototype) === null // true
// 函数的原型是 Function.prototype
function f() {}
Object.getPrototypeOf(f) === Function.prototype // true
Object.setPrototypeOf()
该方法为参数对象设置原型, 返回该参数对象.它接受两个参数,第一个是现有对象,第二个是原型对象
var a = {};
var b = {x: 1};
Object.setPrototypeOf(a, b);
Object.getPrototypeOf(a) === b // true
a.x // 1
Object.create()
Object.create()
用来创建以参数对象为原型的实例对象. 且实例对象完全继承原型对象的属性Object.create()
方法生成的实例对象, 动态继承了原型对象, 在原型对象上的改动会反映在实例对象上.Object.create()
可以接受第二个参数对象, 这个对象会作为实例对象的自身属性
var obj = Object.create({}, {
p1: {
value: 123,
enumerable: true,
configurable: true,
writable: true,
},
p2: {
value: 'abc',
enumerable: true,
configurable: true,
writable: true,
}
});
// 等同于
var obj = Object.create({});
obj.p1 = 123;
obj.p2 = 'abc';
Object.prototype.isPrototypeOf() 方法判断对象是否是参数对象的原型
function fn(){}
var f = new fn()
fn.prototype.isPrototypeOf(f) //true
Object.prototype.__proto__
这个属性在大多数浏览器中都有实现. 实例对象可以用这个属性找到其原型
var obj = new Object();
obj.__proto__ === Object.prototype
// true
Object.getOwnPropertyNames()
该方法返回一个数组, 它接收一个参数对象, 返回这个对象本身的所有属性的键名(不包含继承的)
Object.getOwnPropertyNames(Date)
// ["parse", "arguments", "UTC", "caller", "name", "prototype", "now", "length"]
Object.keys()
该方法返回参数对象的可遍历属性.
Object.keys(Date) //[], 表示Date对象没有可遍历属性
Object.prototype.hasOwnProperty()
该方法接收一个键名作为参数, 判断该键名是否是对象的自身属性. true
表示是对象的自身属性
运算符
in
运算符可以用于判断属性是否属于对象, 不区分自身属性和继承属性. 返回布尔值for-in
用于遍历对象那个的可遍历属性(包括自身和继承)