码迷,mamicode.com
首页 > Web开发 > 详细

用原生js实现一个new方法

时间:2017-03-07 18:59:16      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:span   cti   对比   方法   instance   返回   har   apply   ack   

首先写一个父类方法(包含参数name,age):

function Person(name,age){
    this.name = name;
    this.age = age;
}

new一个Person的实例p1做研究对比

var p1 = new Person("Richard", 22);
//此时p1包含name、age属性,同时p1的__proto__指向Person的prototype
p1.name;//Richard
p1.age;//22
自定义一个New函数:
//通过分析原生的new方法可以看出,在new一个函数的时候,
// 会返回一个func同时在这个func里面会返回一个对象Object,
// 这个对象包含父类func的属性以及隐藏的__proto__
function New(f) {
    //返回一个func
    return function () {
        var o = {"__proto__": f.prototype};
        f.apply(o, arguments);//继承父类的属性

        return o; //返回一个Object
    }
}

通过自定义New方法创建一个实例对象p2:

var p2 = New(Person)("Jack",25);
p2.name;//Jack
p2.age;//25

此时p2 instanceof Person 返回的是true;

Person.prototype.gender ="male";
p1.gender//male
p2.gender//male

 

用原生js实现一个new方法

标签:span   cti   对比   方法   instance   返回   har   apply   ack   

原文地址:http://www.cnblogs.com/zhangxiaoshu/p/6515971.html

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