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()
可以看到原型链的对象被继承下来了,定义在方法外的属性没有被继承下了,返回了一个新对象,可以传递参数
二、实现模拟
我们要做的是,返回一个新对象,把原型链指向构造函数,传递参数
1 2 3 4 5 6 7 8 9
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();