实现一个new

Posted mdge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现一个new相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

实现一个new

实现一个new操作符

new的实现机制

JS实现new关键字的功能

c++中为啥要用new 函数()实现多态?

原生JS封装_new函数,实现new关键字的功能