web前端面试-- 手写原生Javascript方法(new、Object.create)

web面试题

本人是一个web前端开发工程师,主要是vue框架,整理了一些面试题,今后也会一直更新,有好题目的同学欢迎评论区分享 ;-)

web面试题专栏:点击此处


手动实现Object.create

通过Object.create,可以联想到之前讲的JS的7种继承方式之一 原型式继承

实现

js 复制代码
function myCreate(obj) {
    function Fn() { }
    Fn.prototype = obj;
    return new Fn();
}

测试

js 复制代码
var obj = { a: 1, b: 2 }
var obj1 = myCreate(obj)
console.log("obj1:", obj1);
console.log("obj1.a:", obj1.a);

var obj2 = Object.create(obj)
console.log("obj2:", obj2);
console.log("obj2.a:", obj2.a);

new操作符

  1. 新建一个空对象
  2. 将对象的原型__proto__ 指向Fn的prototype
  3. 运行构造函数,并且通过.call 修改函数的作用域,指向obj
  4. 返回构造函数生成的对象,如果不是对象,则返回obj

实现

js 复制代码
function myNew(Fn,...args){
	let obj = Object.create(null);
	obj.__proto__ = Fn.prototype;
	let result = Fn.call(obj,...args);
	return result instanceof Object ? result : obj;
}

测试

js 复制代码
function Fruits(name, price) {
	this.name = name;
	this.price = price;
	this.sayName = function () {
	  console.log(`我是水果:${this.name}`);
	};
	this.sayPrice = function () {
	  console.log(`${this.name}的价格:${this.price}...`);
	};
	return {
	  sayName: () => {
	    console.log(`我是水果:${this.name}`);
	  },
	  sayPrice: () => {
	    console.log(`${this.name}的价格:${this.price}...`);
	  },
	};
}

let banana = new Fruits("香蕉", 10);
banana.sayName();
banana.sayPrice();
console.log(banana);

function myNew(Fn, ...args) {
	let obj = Object.create(null);
	obj.__proto__ = Fn.prototype;
	let ret = Fn.call(obj, ...args);
	return ret instanceof Object ? ret : obj;
}

let banana2 = myNew(Fruits, "香蕉2号", 20);
banana2.sayName();
banana2.sayPrice();
console.log(banana2);

未完待续...

相关推荐
江城开朗的豌豆20 小时前
小程序登录不迷路:一篇文章搞定用户身份验证
前端·javascript·微信小程序
aesthetician20 小时前
React 19.2.0: 新特性与优化深度解析
前端·javascript·react.js
Django强哥20 小时前
JSON Schema Draft-07 详细解析
javascript·算法·代码规范
FIN666820 小时前
射频技术领域的领航者,昂瑞微IPO即将上会审议
前端·人工智能·前端框架·信息与通信
U.2 SSD21 小时前
ECharts漏斗图示例
前端·javascript·echarts
江城开朗的豌豆21 小时前
我的小程序登录优化记:从短信验证到“一键获取”手机号
前端·javascript·微信小程序
excel21 小时前
Vue Mixin 全解析:概念、使用与源码
前端·javascript·vue.js
IT_陈寒21 小时前
Java性能优化:这5个Spring Boot隐藏技巧让你的应用提速40%
前端·人工智能·后端
聪明的笨猪猪21 小时前
Java Spring “MVC ”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
勇往直前plus21 小时前
CentOS 7 环境下 RabbitMQ 的部署与 Web 管理界面基本使用指南
前端·docker·centos·rabbitmq