JavaScript中Function与Object的关系是什么

发布时间:2023-05-04 17:15:22 作者:iii
来源:亿速云 阅读:125

这篇文章主要讲解了“JavaScript中Function与Object的关系是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中Function与Object的关系是什么”吧!

原型链

我们来回顾一下什么是原型

然后是原型链

以上就是原型链的构成

原型链的使用

当你使用一个对象的属性或方法时,会先在该对象上查找已有属性,如果没有,就找到__proto__,找原型身上的属性,如果原型没有,那就再找原型的原型身上是否存在待查找属性,知道找到或者找到原型链的顶端null

关于原型链一些有意思的东西

我们知道typeof可以用于判断变量的数据类型,但是对于复杂数据类型,它只能判断出对象、数组或函数,这对于我们的使用来说是不够的

所以我们可以用instanceof来判断引用数据类型的对象类型

typeof A //'function'
obj instanceof A //true
obj instanceof Object //true

在使用时我发现一个有趣的问题

Function instanceof Object //true
Object instanceof Function //true

这是为什么呢?

我们尝试使用

Function.__proto__===Object.prototype //false

发现得到的是false,也就是Function并不是Object new出来的

但是尝试

Object.__proto__===Function.prototype //true

却发现Object是由Function new出来的

接着我们分析一下instanceof的工作原理, 我们尝试用函数instance_of来手写instanceof关键字

function instance_of(L, R) {
    var O = R.prototype; 
    L = L.__proto__;
    while (true) {    
        if (L === null)      
             return false;   
        if (O === L) 
             return true;   
        L = L.__proto__;  
    }
}

对于以上代码分析,我们其实是在找左值的原型链上是否存在右值的原型

于是我们尝试

Function.__proto__===Function.prototype //true
Function.__proto__.__proto__===Object.prototype //true

发现原来Function.prototype是由Object new出来的,同时Function也是可以由自己new出来

最后是关于new关键字

当代码 new Foo(...) 执行时,会发生以下事情:

尝试用newFun手写new关键字

function newFun(Constructor) {
    var obj = {};
    obj.__proto__ = Constructor.prototype;
    return Constructor.apply(obj);    
};

使用Object.create

function newFun() {
    Constructor = [].shift.call(arguments);// 取出第一个参数Constructor
    var obj = Object.create(Constructor);    
    return Constructor.apply(obj, arguments);// 使用参数调用
};

感谢各位的阅读,以上就是“JavaScript中Function与Object的关系是什么”的内容了,经过本文的学习后,相信大家对JavaScript中Function与Object的关系是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. web前端,css与javascript重难点分析
  2. 详解JavaScript中Event Loop相关原理

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

javascript function object

上一篇:Go channel结构体读写和关闭的过程是什么

下一篇:Windows Server 2008故障转移群集怎么搭建

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》