如何实现一个 new

编程入门 行业动态 更新时间:2024-10-16 22:18:18

<a href=https://www.elefans.com/category/jswz/34/1769177.html style=如何实现一个 new"/>

如何实现一个 new

面试官问:能否模拟实现`JS`的`new`操作符

me or you:木问题!!!

一、进行分析new的过程,主要有以下几点

1、创建一个新的对象

2、把obj的__proto__指向fn的prototype,实现继承

3、改变this的指向,执行构造函数、传递参数,fn.apply(obj,) 或者 fn.call()

4、返回新的对象obj

二、实现代码

<script>/*@author: guoguo@title: 如何实现一个 new@data:2019.2.19*/function Dog(name) {this.name = namethis.say = function () {console.log('name = ' + this.name)}}function Cat(name) {this.name = namethis.say = function () {console.log('name = ' + this.name)}}function _new(fn, ...arg) {const obj = {}; //创建一个新的对象obj.__proto__ = fn.prototype; //把obj的__proto__指向fn的prototype,实现继承fn.apply(obj, arg) //改变this的指向return Object.prototype.toString.call(obj) == '[object Object]'? obj : {} //返回新的对象obj}//测试1var dog = _new(Dog,'aaa')dog.say() //'name = aaa'console.log(dog instanceof Dog) //trueconsole.log(dog instanceof Cat) //true//测试2var cat = _new(Cat, 'bbb'); cat.say() //'name = bbb'console.log(cat instanceof Cat) //true</script>

源码地址:.html

原创不易,自由转载,注明出处

更多推荐

如何实现一个 new

本文发布于:2024-03-23 18:27:37,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1741388.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何实现

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!