Object.create
简介
创建一个拥有指定原型和若干指定属性的对象。多用于对象继承。
语法
Object.create(prototype,[proptertiesObject])
参数
- 第一个参数 一个对象,最为新创建对象的原型或者为null;
- 可选,该参数的对象拥有一组属性和值,改对象的属性名称和值将会复制给新创建的对象,只有该对象自身拥有的可枚举属性才有效,也就是说该对象的原型链上的属性不会复制给新创建的对象。
抛出异常
如果该对象的第一个参数不是不是一个对象或者null,将会抛出一个TypeError异常。
示例1
function Fn(){
var a = 3;
var b = 4;
this.c = 5;
this.b = 6;
}
Fn.prototype.log1 = function(){
console.log(this.a,this.b);
}
Fn.prototype.log2 = function(){
console.log(this.c,this.b);
}
function Fn1(){
Fn.call(this); //访问构造函数
}
//继承 Fn 的原型链,Fn相当于Fn1的父类了
Fn1.prototype = Object.create(Fn.prototype);
var fn1 = new Fn1();
fn1 instanceof Fn //true
fn1 instanceof Fn1 //ture
// a 和 b,没有挂载到fn的原型链上,所以无法访问
// a 和 b,相当于是 fn 函数作用域下的局部变量,外部无法访问。
fn.log1(); //undefined undefined
fn1.log1(); //undefined undefined
// b 和 c,挂载到了fn的原型链上,所以可以用this访问
fn.log2(); // 5 6
fn1.log2();// 5 6