【问题标题】:Is it possible to make a property in javascript?是否可以在javascript中创建属性?
【发布时间】:2009-08-05 17:31:54
【问题描述】:

我想创建一个自定义的Array 对象,它接收一个数字作为索引,并且根据索引的值,它会返回一个计算值。

例如:

>>> var MyArray(2);
>>> MyArray[2];
4
>>> MyArray.2;
4

我知道对于显示的示例,我更喜欢使用函数,但我想知道我是否可以覆盖一些概念数组但可能需要一些计算的东西的属性/索引查找。

我知道x.1 == x[1],所以我需要在 javascript 中创建一个属性。

我的意思是,生成x.variable = x.myPropery(),所以每次我得到x.variable 的值时,我都会收到x.myPorperty() 的返回。

这可能吗?

【问题讨论】:

    标签: javascript arrays properties overloading


    【解决方案1】:

    variable[property] 与点表示法相同,因此您正在执行 MyArray.2,它是一个变量,而不是一个被评估的方法。如果没有在分配属性时更改属性的方法或在取出属性时计算正确值的方法,您将无法真正做您想做的事情。

    不,你不能覆盖 [],它只是点符号,它不是一个你可以覆盖的索引

    Re: 你的评论,绝对可以的

    var x = new Array();
    x[1] = function () { alert('x') };
    
    var myFunction = x[1];
    
    x[1]();        // alerts "x"
    myFunction();  // alerts "x"
    
    alert(x[1]);         // alerts "function () { alert('x') };"
    alert(myFunction);   // alerts "function () { alert('x') };"
    

    【讨论】:

    • 我知道x[1] == x.1。有没有办法让x.i == x.myProperty()
    • 我已经在帖子中提到过,记住,你可以声明和传递函数,你可以调用它们并获取它们的结果,但你不能调用没有 () 的函数
    • 我想我没有正确解释自己。我知道可以分配函数,但是可以完成像 Python、.NET 这样的属性,而不是 Java 的 getter 和 setter?
    • 你想要一个 C# 风格的 getter,比如: int MyProperty get { return computed_value; }; ?如果是这样,不,你不能这样做
    【解决方案2】:

    目前Javascript Getters and Setters are possible 仅在

    • 火狐
    • Safari 3+
    • Opera 9.5+

    Internet Explorer(在任何版本中)在这方面都缺乏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 2014-06-11
      • 2010-09-20
      • 2020-05-09
      相关资源
      最近更新 更多