javascript – 在JS数组中使用命名键

前端之家收集整理的这篇文章主要介绍了javascript – 在JS数组中使用命名键前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究 The Principles of Object-Oriented Javascript并且与Zakas在数组中使用命名键(而不是在对象内部)相混淆.见评论
function EventTarget() {}

EventTarget.prototype = {

    constructor: EventTarget,addListener: function(type,listener) {

        if (!this.hasOwnProperty("_listeners")) {
            // Why isn't this: `this._listeners = {};`
            this._listeners = [];
        }

        if (typeof this._listeners[type] === "undefined") {
            this._listeners[type] = [];
        }

        this._listeners[type].push(listener);
    },// more stuff
}

var target = new EventTarget();
target.addListener("message",function(event) {
    console.log("Message is " + event.data);
});

他的代码工作得很好(如果你用数组替换对象文字就行了),但我的理解是,如果你想按名称访问内容,你应该使用一个对象.从array article on w3schools开始:

Many programming languages support arrays with named indexes.
Arrays with named indexes are called associative arrays (or hashes).
JavaScript does not support arrays with named indexes.
In JavaScript,arrays always use numbered indexes.

Zakas是否有充分理由使用这样的阵列?你能解释一下吗?或者,这是我应该提交给the errata的吗?

解决方法

我能看到的唯一原因是:让人困惑. JavaScript并没有强制执行任何东西,因为一切都是对象,你可以做任何你想要的事情.这家伙正在使用数组存储命名属性,但他很可能已经使用了函数或其他任何东西!

编辑:几乎所有东西都是一个对象(有人可能会尝试在undefined上设置属性,因为JavaScript中最常见的错误之一是TypeError:undefined不是对象.叹息JavaScript,你为什么这么做这对我们来说?

原文链接:https://www.f2er.com/js/158853.html

猜你在找的JavaScript相关文章