为什么初始化的JavaScript对象不包含原型对象?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了为什么初始化的JavaScript对象不包含原型对象?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1475字,纯文字阅读大概需要3分钟。
内容图文
![为什么初始化的JavaScript对象不包含原型对象?](/upload/InfoBanner/zyjiaocheng/733/bebe18964dfc4fffae7961522f33a1ae.jpg)
我尝试使用以下代码向对象添加start方法:
var Bounce = Bounce || {
Info : {},
Game : {}
};
Bounce.Game.prototype.start = function() {
Bounce.log("Starting " + new Bounce.Info());
}
但是这会导致以下错误(在Bounce.Game.prototype.start行上):
Uncaught TypeError: Cannot set property ‘start’ of undefined
在Chrome控制台中查看对象,我可以看到它不包含原型对象(但是包含toString,valueOf和构造函数等).
通过在原型访问之前添加以下行可以轻松解决此问题:
Bounce.Game = function() {};
当对象已经初始化时,我不知道为什么这是必要的?
W3Schools告诉我“每个JavaScript对象都有一个原型”,但似乎并非如此.
解决方法:
从概念上讲,所有对象都有一个原型,但只有函数对象(包括像Object,Array这样的构造函数,尽管它们不生成函数)具有名为prototype的属性.他们不一样.
如果您阅读了ECMAScript规范,那么原型通常表示为[[Prototype]],这是一个实现细节,位于JS引擎中,而不是语言特性.但是,在某些引擎中[[Prototype]]被公开,可以使用__proto__属性(非标准)访问.
顺便说说:
>如果你想访问[[Prototype]],Object.getPrototypeOf()就是你的朋友.
>当使用instanceof b时,它实际上将a [[Prototype]]链与b的prototype属性进行比较.
>为什么我们说null是所有的原型?它也不是指原型而是[[Prototype]]:
Object.getPrototypeOf(Object.getPrototypeOf({})) // null
Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf([]))) // null
Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(new String("")))) // null
// or shorter like this
({}).__proto__.__proto__ // null
([]).__proto__.__proto__.__proto__ // null
("").__proto__.__proto__.__proto__ // null
内容总结
以上是互联网集市为您收集整理的为什么初始化的JavaScript对象不包含原型对象?全部内容,希望文章能够帮你解决为什么初始化的JavaScript对象不包含原型对象?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。