寒潮ing,你可能在FaceTest中遇到(1)—— new运算符及手动实现

写在前面javascript

    受去年大环境的影响,目前很现实的问题就是,今年使人满意的工做不是那么的好找。如今前端仅仅当个api user很难找到满意的工做,因此本系列旨在接下来的一段时间里分享一些前端知识,帮助更好的拿到满意offer。前端


下面进入主题

new的过程实际上进行了四个步骤

  1. 建立一个新对象
  2. 将构造函数的prototype赋值给新对象的__proto__
  3. 构造函数中的this指向新对象,而且调用构造函数
  4. 若是构造函数无返回值,或者不是引用类型,返回新对象;不然为构造函数的返回值。

手动实现

function MyNew(Fn,...args) {
	// 建立一个新对象
	let obj = {};
	// 将构造函数的prototype赋值给新对象的__proto__
	obj.__proto__ = Fn.prototype;
	// 将构造函数的this指向新对象obj,而且调用这个新对象
	let res = Fn.apply(obj,args);
	// 若是返回值不是引用类型,返回obj,不然返回res
	return res instanceof Object ? res : obj
}
function Fn(name='dd',age='18') {
	this.name = name;
	this.age = age;
}
let res = new Fn();
let myRes = new Fn('Charles','20');
console.log(res);
// {
// age: "18",
// name: "dd",
// __proto__: Object
// }
console.log(myRes);
// {
// age: "20",
// name: "Charles",
// __proto__: Object
// }
console.log(Object.getPrototypeOf(res) === Object.getPrototypeOf(myRes));
// true
复制代码

结语java

    我会不按期的分享前端各类知识点还有我以及小伙伴实际中遇到的问题,第一次写技术文章,欢迎各位大佬指出不对的地方。
    若是你不知道从哪开始准备,若是你想巩固前端知识,那么关注我吧,一章一个知识,看完不只不累还想再加会儿班,括弧笑。api

PS:部份内容会来自互联网以及书籍,全是原创原谅我作不到哇。app

相关文章
相关标签/搜索