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;
}
}