获取实例的原型对象
Object.getPrototypeOf()
方法返回参数对象的原型。
// 空对象的原型是 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 = function(){
};
//需要设置的原型对象
var B = {
message: "测试"
}
console.log(Object.getPrototypeOf(A) === B); //false
var a = new A(); //实例化A
//给a设置原型对象B,第一个参数为实例对象,第二个参数是需要设置的原型对象
Object.setPrototypeOf(a,B);
console.log(Object.getPrototypeOf(a) === B); //true
console.log(a.message);
-
new
命令可以使用Object.setPrototypeOf
方法模拟。var F = function () { this.foo = 'bar'; }; var f = new F(); // 等同于,setPrototypeOf方法,返回该参数对象 var f = Object.setPrototypeOf({}, F.prototype); F.call(f);
创建实例对象
JavaScript 提供了
Object.create
方法,用来创建指定原型对象的实例,该方法接受一个对象作为参数,然后以它为原型,返回一个实例对象。该实例完全继承原型对象的属性。
// 原型对象
var A = {
print: function () {
console.log('hello');
}
};
// 实例对象
var B = Object.create(A);
Object.getPrototypeOf(B) === A // true
B.print() // hello
B.print === A.print // true
Object.prototype.isPrototypeOf()
实例对象的
isPrototypeOf
方法,用来判断该对象是否为参数对象的原型。
var o1 = {};
var o2 = Object.create(o1);
var o3 = Object.create(o2);
o2.isPrototypeOf(o3) // true
o1.isPrototypeOf(o3) // true