Javascript 模拟 new
一、开始
同样我们先来看看new操作符为我们做了什么事情:
function Person(name, sex){ this.hobby = 'shopping'; this.name = name; this.sex = sex; this.sayName = function(){ console.log(this.name) }; } Person.weight = '60kg'; Person.prototype.friend = 'rose'; var person = new Person('jack','age'); person.sayName();
输出是:
可以看到原型链的对象被继承下来了,定义在方法外的属性没有被继承下了,返回了一个新对象,可以传递参数
二、实现模拟
我们要做的是,返回一个新对象,吧原型链指向构造函数,传递参数
function Create(){ var obj = {}; var Constructor = [].shift.call(arguments); obj.__proto__ = Constructor.prototype; Constructor.apply(obj,arguments); return obj; }; var person = Create(Person,'jack','age'); person.sayName();
其实很多东西只要是知道了干什么的,再去实现起来就很有思路了