js 实现new 关键字


首先要清楚类和对象之间的关系,然后要清楚实例化(new)的过程中发生了什么。

笔者认为类和对象的关系比较好理解,就如同要按照图纸盖一幢房子,图纸就是类,房子就是对象。类是对象的抽象,对象是类的实体体现。

new的过程发生了什么呢?

var Person=function(name,age){
    this.name=name;
    this.age=age;
}
Person.prototype.getName=function(){
    return this.name;
}
var p1=new Person('Tom',12)
p1.getName()    //Tom

有上面的例子可知,new的过程中创建了一个对象,根据构造函数的结构,原型,及方法等全部赋给这个对象,最后返回这个对象。

实现代码如下:

function New(fn){
    var res = {};
    if(fn.prototype !== null) {
        res.__proto__=fn.prototype;
    }
    // 将传入构造函数的参数,在res上下文中执行一遍
    var ret = fn.apply(res,Array.prototype.slice.call(arguments,1));
    // 如果构造函数返回一个对象,则直接返回这个对象 
    if((typeof ret === 'object' || typeof ret === 'function') && ret !== null){
        return ret;
    }
    return res;
}
var Person = function(name,age){
    this.name=name;
    this.age=age;
}
Person.prototype.getName=function(){
    return this.name;
}
var p1=New(Person,'Tom',12)
console.log(p1.getName())//Tom

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM