在今天的学习中,更深层次的了解了一下ES5中内置函数Object的新方法Object.create()
,觉得这个api功能真的十分强大,并且使用的场景也有很多,现和各位同行们分享学习成果,欢迎各位大佬们指正,废话不多说,开整…
Object()
如果传入参数null,undefined,或者不传入,则相当于new Object(),创建有原型的空对象Object(原始类型值)
将原始类型的值转化为Object类型,也等效于new Object(原型类型值)Object(引用类型的对象)
什么都不做,还返回原对象【扩展】:object.prototype
对象是所有对象的父对象,那么根据原型链的原理Object.prototype.__proto__
,object.prototype
就是原型链的顶端了吗?
答案:当然不是喽,原型链的顶端是null
,下面,我们在浏览器中来验证~~
内置函数Object中有很多的方法,下来我们着重介绍Object.create()
Object.create()
用于创建一个新对象
新对象继承自指定的父级原型对象
同时又扩展出多个自有属性
语法
Object.create方法的特殊用法
创建一个原型为null的空对象:var obj=Object.create(null)
实现子类型构造函数的原型继承父类型构造函数的原型: Son.prototype=Object.create(Parent.prototype)
创建普通空对象 等效于var obj={}:var obj=Object.create(Object.prototype)
创建对象同时扩展自有属性
var staff={name:"dema",age:28}
var business=Obejct.create(staff,{
eid:{
value:555,
writable:true,
enumerable:true
}
})
案例
```javascript
function Flyer(fname,speed){
this.fname=fname;
this.speed=speed
}
Flyer.prototype.fly=function(){
console.log(`${this.name}以时速${this.speed}飞行`)
}
function Plane(fname,speed,capacity){
Flyer.call(this,fname,speed)
this.capacity=capacity
}
Plane.prototype=Object.create(Flyer.protoType)
var b747=new Plane('B747',700,300)
b747.fly()
console.log(b747)
```