本文出至(讨论): 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(); 即: Object 是 Function 的一个实例,所以,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
分享到:
相关推荐
在旧版浏览器中,可以通过`__proto__`直接访问,但在ES5及以后的规范中,推荐使用`Object.getPrototypeOf`或`Object.prototype.isPrototypeOf`来操作原型链。 ```javascript function Person() {} let person = new...
其语法为`object1.isPrototypeOf(object2)`,如果`object2`是`object1`的原型,即`object2`从`object1`继承,那么返回`true`,否则返回`false`。 1. **示例**: ```javascript function Animal() {} function ...
Function instanceof Object 和 ... 即:Object 是 Function 的一个实例,所以,Object 原型链中便包含 Function.prototype,得出: Function.prototype.isPrototypeOf(Object) 为 true 2。同时,js中,所有对象(不包
### 一、什么是`prototype`? `prototype`在JavaScript中是一个内置属性,它允许一个对象可以访问另一个对象的属性和方法。当你尝试访问一个对象的属性或方法时,如果该对象自身没有这个属性或方法,JavaScript引擎...
true.constructor === Boolean; // true ``` **2.5 其他判断数组的方法** - `instanceof Array` - `[].constructor === Array` - `Object.prototype.toString.call([])` - `Array.isArray([])` - `Array....
- 可以使用`isPrototypeOf()`方法或`Object.getPrototypeOf()`方法来判断一个对象是否位于另一个对象的原型链中。 ```javascript console.log(Person.prototype.isPrototypeOf(person1)); // 输出: true console...
2. 继承性检验:如果`object1.isPrototypeOf(object2)`返回`true`,则说明`object2`可以访问`object1`原型上的属性和方法。 3. 避免错误:使用`instanceof`操作符有时可能因为混用不同构造器的实例和原型而产生误判...
例如,即使我们改变了`a.prototype`,`foo.prototype.isPrototypeOf(a)`依然返回`true`,因为`a`的`[[Prototype]]`仍然链接到`foo.prototype`。 JavaScript的原型链结构可以用箭头表示,如: ``` Function ---> ...
实际上还有更多如`Object.freeze()`, `Object.seal()`, `Object.preventExtensions()`等用于对象状态管理的方法,以及`Object.prototype.hasOwnProperty()`、`Object.prototype.isPrototypeOf()`等与原型链相关的...
这也解释了为什么Object.prototype.hasOwnProperty('isPrototypeOf')会返回true,因为从Function构造Object的过程中,Object.prototype被赋予了constructor属性,指向Function,从而使得Object.prototype实际上是一...
原型还可以通过`Object.getPrototypeOf()`或`Object.prototype.isPrototypeOf()`进行操作。 四、作用域 JavaScript的对象在不同的作用域中可以有不同的可见性。全局对象在整个代码中都可用,而局部对象仅在其定义的...
在这个概念中,每个对象都有一个内部属性`[[Prototype]]`,通常通过`__proto__`、`Object.getPrototypeOf()`或`o.constructor.prototype`来间接访问。这里我们详细讨论这三种访问原型对象的方法。 1. `__proto__`: ...
1. **添加方法**:可以通过直接修改构造函数的`prototype`来为所有实例添加方法,如`MyConstructor.prototype.myMethod = function() {}`。 2. **覆盖方法**:如果子类的`prototype`中定义了与父类同名的方法,那么...
首先来看isPrototypeOf方法,它是Object.prototype上的一个方法,用来判断调用它的对象(object1)是否存在于另一个对象(object2)的原型链上。如果object1位于object2的原型链中,不论object1在原型链的哪个位置,...
var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf'); // Not own constructor property must be Object if (obj.constructor &&...
同样,`Object.prototype.isPrototypeOf(instance)`、`SuperType.prototype.isPrototypeOf(instance)`和`SubType.prototype.isPrototypeOf(instance)`都将返回`true`。 谨慎定义方法 在给原型添加方法时,应当避免...
console.log(Object.prototype.isPrototypeOf(obj)); ``` 4. propertyIsEnumerable(prototypeName)方法 prototypeIsEnumerable 用来推断给定的属性是否可以被 for..in 语句给枚举出来。 ``` var obj = { name: ...
Object.prototype.isPrototypeOf(map); // false Object.getPrototypeOf(map); // null ``` 这种裸对象是作为HashMap的理想选择,因为它不会触发任何类型转换错误,例如: ```javascript var map = Object.create...