JS中new的自定义实现创建实例对象

我们都知道在JS中通常通过对象字面量和new关键字来创建对象,那么今天我就来给大家讲讲new是怎么创建实例对象的;首先创建一个构造函数;

function Person(name,age){

  this.name=name;  

  this.age=age;

};

var p=new Person('ck',16)

通过new可以创建构造函数Person的实例对象。那么我们怎么去实现这一功能的呢?下面就为大家揭晓谜底:

function New(fn){

   return function(){

    var obj={'__proto__':fn.prototype};

    fn.apply(obj,arguments);

    return obj;

}

}

var p1=New(Person)('chen',22)

p1.name;//打印chen 

p1.age;//打印22

p1 instanceof Person // true 验证p1是否是Person的实例对象。 

这样我们就可以自定义创建一个实例对象了。

1、首先呢通过创建一个New函数,该函数接收一个参数(要创建实例对象的构造函数);

2、然后函数内部返回一个匿名函数

3、匿名函数内部返回一个对象,该对象就是构造函数的实例对象;那么这里有一个问题就是我们要使New函数可以通用,那么就要知道每一个构造函数的实例对象的属性;所以我在匿名函数的内部通过apply()方法用构造函数替换当前对象obj;同时将构造函数的执行上下文指向obj;故obj对象就继承了构造函数的相关属性。

好了,今天大概就分享一下这个吧,顺便大家可以想下如果把obj对象的位置放到匿名函数的外面即New函数里面会有什么不同呢?

function New(fn){

   var obj={'__proto__':fn.prototype};

   return function(){

    fn.apply(obj,arguments);

    return obj;

}

}

posted @ 2017-03-28 10:33  陈泽钦前端技术博客  阅读(4460)  评论(4编辑  收藏  举报