`
chpn
  • 浏览: 8770 次
  • 来自: ...
社区版块
存档分类
最新评论

为什么Object.prototype.isPrototypeOf(Function)是true

阅读更多

本文出至(讨论): http://jsvm.org/forums/1947/ShowPost.aspx#1947


js 中 Object 和 Function 的关系是微妙的,他们互为对方的一个“实例”。
Function  instanceof  Object  和 Object  instanceof  Function  都是 true

1。我们可以认为 Object 是一个特殊的“类”,而这里的“类”即:function

于是便可以理解为: Object = function () {}  或 Object = new Function(); 即: ObjectFunction 的一个实例,所以,Object 原型链中便包含 Function.prototype,得出: Function.prototype.isPrototypeOf(Object)  为 true

2。同时,js中,所有对象(不包括js语言外部对象)都可视为是 Object 的一个实例, Function 不例外,Function.prototype 亦不例外,于是有Function = new Object();  Function.prototype = new Object(), 于是 Object.prototype.isPrototypeOf(Function)  和 Object.prototype.isPrototypeOf(Function.prototype) 都为 true 了

3。补充:Function 本身也是一个“类”,然而,所有“类”都是Funciton的实例,于是 Function instanceof Function; 为true。同时,所有对象都是 Object 类的实例,Object 本身也是一个对象,所有又有 Object instanceof Object 也为 true。另外,还可以认为 Funciton 类型是 Object  类型的一个“派生类”,class Function 继承了class Object ,是 class Object 的一个“子类”。

更多内容请查看:http://jsvm.org/forums/1947/ShowPost.aspx#1947

分享到:
评论

相关推荐

    了解JavaScript中的prototype (实例)

    在旧版浏览器中,可以通过`__proto__`直接访问,但在ES5及以后的规范中,推荐使用`Object.getPrototypeOf`或`Object.prototype.isPrototypeOf`来操作原型链。 ```javascript function Person() {} let person = new...

    JS中的hasOwnProperty()和isPrototypeOf()属性实例详解

    其语法为`object1.isPrototypeOf(object2)`,如果`object2`是`object1`的原型,即`object2`从`object1`继承,那么返回`true`,否则返回`false`。 1. **示例**: ```javascript function Animal() {} function ...

    JavaScript中Object和Function的关系小结

    Function instanceof Object 和 ... 即:Object 是 Function 的一个实例,所以,Object 原型链中便包含 Function.prototype,得出: Function.prototype.isPrototypeOf(Object) 为 true 2。同时,js中,所有对象(不包

    prototype学习

    ### 一、什么是`prototype`? `prototype`在JavaScript中是一个内置属性,它允许一个对象可以访问另一个对象的属性和方法。当你尝试访问一个对象的属性或方法时,如果该对象自身没有这个属性或方法,JavaScript引擎...

    前端Javascript相关面试基础问答整理md

    true.constructor === Boolean; // true ``` **2.5 其他判断数组的方法** - `instanceof Array` - `[].constructor === Array` - `Object.prototype.toString.call([])` - `Array.isArray([])` - `Array....

    详解js中的原型,原型对象,原型链.docx

    - 可以使用`isPrototypeOf()`方法或`Object.getPrototypeOf()`方法来判断一个对象是否位于另一个对象的原型链中。 ```javascript console.log(Person.prototype.isPrototypeOf(person1)); // 输出: true console...

    JavaScript中isPrototypeOf函数作用和使用实例

    2. 继承性检验:如果`object1.isPrototypeOf(object2)`返回`true`,则说明`object2`可以访问`object1`原型上的属性和方法。 3. 避免错误:使用`instanceof`操作符有时可能因为混用不同构造器的实例和原型而产生误判...

    关于JavaScript 原型链的一点个人理解

    例如,即使我们改变了`a.prototype`,`foo.prototype.isPrototypeOf(a)`依然返回`true`,因为`a`的`[[Prototype]]`仍然链接到`foo.prototype`。 JavaScript的原型链结构可以用箭头表示,如: ``` Function ---> ...

    当然--Object_methods

    实际上还有更多如`Object.freeze()`, `Object.seal()`, `Object.preventExtensions()`等用于对象状态管理的方法,以及`Object.prototype.hasOwnProperty()`、`Object.prototype.isPrototypeOf()`等与原型链相关的...

    理解Javascript_11_constructor实现原理

    这也解释了为什么Object.prototype.hasOwnProperty('isPrototypeOf')会返回true,因为从Function构造Object的过程中,Object.prototype被赋予了constructor属性,指向Function,从而使得Object.prototype实际上是一...

    JavaScript中的对象.zip

    原型还可以通过`Object.getPrototypeOf()`或`Object.prototype.isPrototypeOf()`进行操作。 四、作用域 JavaScript的对象在不同的作用域中可以有不同的可见性。全局对象在整个代码中都可用,而局部对象仅在其定义的...

    JavaScript中的原型链prototype介绍

    在这个概念中,每个对象都有一个内部属性`[[Prototype]]`,通常通过`__proto__`、`Object.getPrototypeOf()`或`o.constructor.prototype`来间接访问。这里我们详细讨论这三种访问原型对象的方法。 1. `__proto__`: ...

    prototype手册

    1. **添加方法**:可以通过直接修改构造函数的`prototype`来为所有实例添加方法,如`MyConstructor.prototype.myMethod = function() {}`。 2. **覆盖方法**:如果子类的`prototype`中定义了与父类同名的方法,那么...

    JavaScript isPrototypeOf和hasOwnProperty使用区别

    首先来看isPrototypeOf方法,它是Object.prototype上的一个方法,用来判断调用它的对象(object1)是否存在于另一个对象(object2)的原型链上。如果object1位于object2的原型链中,不论object1在原型链的哪个位置,...

    weapp.qrcode.js

    var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf'); // Not own constructor property must be Object if (obj.constructor &&...

    JavaScript基于原型链的继承

    同样,`Object.prototype.isPrototypeOf(instance)`、`SuperType.prototype.isPrototypeOf(instance)`和`SubType.prototype.isPrototypeOf(instance)`都将返回`true`。 谨慎定义方法 在给原型添加方法时,应当避免...

    javascript计时器编写过程与实现方法_.docx

    console.log(Object.prototype.isPrototypeOf(obj)); ``` 4. propertyIsEnumerable(prototypeName)方法 prototypeIsEnumerable 用来推断给定的属性是否可以被 for..in 语句给枚举出来。 ``` var obj = { name: ...

    详解JavaScript中Hash Map映射结构的实现_.docx

    Object.prototype.isPrototypeOf(map); // false Object.getPrototypeOf(map); // null ``` 这种裸对象是作为HashMap的理想选择,因为它不会触发任何类型转换错误,例如: ```javascript var map = Object.create...

Global site tag (gtag.js) - Google Analytics