zoukankan      html  css  js  c++  java
  • 实现一个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)

  • 相关阅读:
    字符串
    完全背包
    背包2
    0-1背包
    生日劲歌会
    设计照明系统
    宝岛探险
    汉诺塔问题
    并查集 黑帮危机
    数塔问题
  • 原文地址:https://www.cnblogs.com/MDGE/p/11563350.html
Copyright © 2011-2022 走看看