先贴一下代码
let cat = function(sex, language) {
this.sex = sex
this.language = language
}
cat.prototype.say = function() {
console.log(this.language)
}
cat.prototype.getSex = function() {
console.log(`my sex is ${this.sex}`)
}
function _new(fn, ...args) {
const obj = Object.create(fn.prototype)
const ret = fn.apply(obj, args)
return ret instanceof Object ? ret : obj
}
let mao = _new(cat, 'female', 'miao')
1.利用Object.create
方法fn继承prototype
原型链
Object.create(proto, [propertiesObject])
创建一个新对象,使用现有对象来提供新创建的对象的proto
-
参数
- proto:必须,标示新建对象的原型链,
- propertiesObject : 可选,添加到新建对象的可枚举属性。即自己的属性
-
return
- 在制定原型对象上添加属性后的对象。
// 创建一个以另一个空对象为原型,且拥有一个属性p的对象
o = Object.create({}, { p: { value: 42 } })
// 省略了的属性特性默认为false,所以属性p是不可写,不可枚举,不可配置的:
o.p = 24
// 不可以写,不可以配置,依旧是42
o.p
//42
o.q = 12
for (var prop in o) {
console.log(prop)
}
//"q",无法获取p,因为该属性是无法枚举也是不可以写的。
delete o.p
//false
2.将obj新对象引入fn的方法中,顺便带入argments参数。
3.返回对象。
instanceof
ret instanceof Object
ret的原型是否在Object的原型链中
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。