【问题标题】:Object is property of window (global), window is instance of Object?对象是窗口的属性(全局),窗口是对象的实例?
【发布时间】:2017-06-18 04:57:04
【问题描述】:
我是 JavaScript 新手。我们知道 Object 是 window 上的属性,window 怎么可能是 Object 的一个实例呢?他们分享一些方法吗?我可以创建一个这样的对象吗?对不起我的英语,谢谢。 :)
window.hasOwnProperty("Object"); // return true
window instanceof Object // return true
【问题讨论】:
标签:
javascript
object
constructor
window
instanceof
【解决方案1】:
简短的回答是,全局 Window 对象是一个 Object,可以将视为 Object 的一个实例,但在 JavaScript 中,这都是综合。
tl;dr 的答案……
从其他 OO 语言(例如 C++ 或 Java)转向 JavaScript 可能会令人困惑。 JavaScript 与其他语言不同,它不是纯 OO 语言。特别是,在传统意义上,没有“类”纯声明被动地充当实例和子类的模板。作为一种解释型语言(而不是 C++ 和 Java 等编译型语言),JavaScript 是基于“原型”函数的;类/子类关系通过实例的实例化方式和原型引用的“链”通过每个函数的__proto__ 属性模拟。
尽管class 关键字已添加到最近的 JavaScript 标准中,但它的实现是建立在先前存在的函数定义和原型链机制之上的。 “子类化”可以通过在针对函数调用 new 之前设置函数的 prototype 属性来实现。这将创建一个对象实例,其__proto__ 属性由prototype 属性的值定义。
在查找成员数据和方法时,如果不在当前实例中,则在__proto__属性链中搜索该成员,直到找到或到达链的末尾。