【问题标题】:Change Array.prototype in ecmascript (javascript)在 ecmascript (javascript) 中更改 Array.prototype
【发布时间】:2016-09-29 12:41:19
【问题描述】:

我正在开发一个使用结合了 HTML、CSS 和 JS 的 node_webkit 的应用程序。在我的应用程序的一部分中,我想更新 Array.prototype 以便我可以轻松访问数组的最后一个元素。代码是:

if (!Array.prototype.last){
    Array.prototype.last = function(){
        return this[this.length - 1];
    };
}

如果我只运行运行良好且符合预期的 js 文件。如果我将该 js 文件包含到 HTML 文档中,则数组的原型似乎保持不变,并且出现错误:

data.last 不是函数

我是否必须更改某些内容以便我可以从 HTML 文件正常运行我的代码,或者这根本不起作用,我必须采取很长的路要走,并使用 array[array.length - 1] 访问每个数组?

我用来包含脚本的 HTML 代码是:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="../CSS/Cocktails.css">
    <title>Cocktails</title>
    <script type="text/javascript" src="../JavaScript/Cocktail.js"></script>
  </head>
  <body>
  /* some elements, that don't use the script yet */
  </body>
</html>

【问题讨论】:

  • 我认为你的意思是在 ecmascript (javascript) 中更改 Array.prototype。您还没有发布您用来包含脚本的 HTML 文档(这可能是加载顺序问题)...您可以分享一下吗?另外,您如何在 js 的 HTML 版本中声明 data
  • errr ...分享ACTUAL html,以便确定加载顺序,您的问题仍然无法分析。因为从表面上看它应该可以工作。
  • 啊,没关系,我想我知道你的问题可能是什么。我会发布答案
  • 您正在服务器端创建Array.prototype.last(),但很可能不在客户端。您应该检查您的 Cocktail.js 脚本是否真的包含 Array.prototype.last() 的条件定义,或者检查您的 data 是否真的是一个数组。

标签: javascript html arrays node.js node-webkit


【解决方案1】:

在 ES5 中,您需要使用 defineProperties 才能以可编号的方式修改 Array 原型:

以下应该可以,

Object.defineProperties(Array.prototype, 
       { last: { value: function() { return this[this.length - 1]; } } });

更多信息请访问:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties

【讨论】:

  • 不幸的是,这并没有改变结果。我认为我的问题是我使用 node.js 来创建数组。如果我使用我的代码并使用我自己定义的普通数组,它可以正常工作。所以也许我的另一个只是不被认为是“真正的数组”,因此原型的变化没有影响。如果我记录数组的原型,我会说未定义。所以我必须调查一下,我猜。但是感谢您的帮助
【解决方案2】:

听起来你没有调用函数,你想像data.last() 那样调用它,其中data 是你声明的某个数组。 Here's a JSFiddle 在行动中。

【讨论】:

    猜你喜欢
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多