码迷,mamicode.com
首页 > 其他好文 > 详细

实现一个new

时间:2019-09-21 17:22:24      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:dog   const   eof   app   UNC   cat   size   his   name   

function Dog(name) {
this.name = name
this.say = function () {
console.log(‘name = ‘ + this.name)
}
}
function Cat(name) {
this.name = name
this.say = function () {
console.log(‘name = ‘ + this.name)
}
}
function _new(fn, ...arg) {
const obj = {}; //创建一个新的对象
obj.__proto__ = fn.prototype; //把obj的__proto__指向fn的prototype,实现继承
fn.apply(obj, arg) //改变this的指向
return Object.prototype.toString.call(obj) == ‘[object Object]‘? obj : {} //返回新的对象obj
}

//测试1
var dog = _new(Dog,‘aaa‘)
dog.say() //‘name = aaa‘
console.log(dog instanceof Dog) //true
console.log(dog instanceof Cat) //false
//测试2
var cat = _new(Cat, ‘bbb‘);
cat.say() //‘name = bbb‘
console.log(cat instanceof Cat)

实现一个new

标签:dog   const   eof   app   UNC   cat   size   his   name   

原文地址:https://www.cnblogs.com/MDGE/p/11563350.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!