1.创建一个新对象;[var o = new Object();]
2. 新对象prototype指向传入function的prototype
3.将构造函数的作用域赋给新对象(因此this指向了这个新对象);[Person.apply(o)] [Person原来的this指向的是window]
4.执行构造函数中的代码(为这个新对象添加属性);
5.返回新对象。
function Person(name, age) { this.name = name; this.age = age; this.sayName = function() { alert(this.name); } }
function newClass(P) { var o = new Object(); var args = Array.prototype.slice.call(arguments, 1); o.__proto__ = P.prototype; P.prototype.constructor = P; P.apply(o, args); return o; }
//p2为p1的实现原理.由于prototype是直接的指针引用。所以prototype中的值引用类型都是共享的。构造中的参数不是共享的 var p1 = new Person('111',12); var p2 = newClass(Person,'111',12);
console.log(p1.constructor); console.log(p1.ceshi); console.log("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`"); console.log(p2.constructor); console.log(p2.ceshi);