// 假设你在学习之前了解 js面向对象
function Student(name){
this.name = name;
}
const stu = new Student("Tom");
// 当我们通过构造函数 new 一个实例时都做了什么?
1. 创建一个新对象
2. 将新对象的 __proto__ 指向构造函数的 prototype //(所以实例可以使用构造函数上的属性和方法)
3. 将构造函数的 this 指向这个新对象
4. 返回新对象
// 所以根据四个步骤我们可以仿写一个 new
function _new(fn, ...props){
// 创建一个新对象
const obj = {};
// 将新对象的 __proto__ 指向构造函数的 prototype
Object.setPrototypeOf(obj, fn.prototype); // 相当于 obj.__proto__ = fn.prototype, 但是不建议直接使用__proto__
// 将构造函数的 this 指向这个新对象
const newObj = fn.apply(obj, props);
// 返回这个新对象
return newObj === 'object' ? newObj : obj
}
const stu1 = _new(Student, "Tom")
// 可以打印一下 stu 和 stu1 效果一样, 而且 Object.getPrototypeOf(stu) === Object.getPrototypeOf(stu1) 为 true;
// Object.getPrototypeOf(stu) 相当于 stu.__ptoto__
js new操作符做了什么?怎么仿写一个new?
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...