2

在 PHP 中,一个类可以实现 ArrayAccess 接口,因此可以像这样实例化和访问该类:

class MyClass implements ArrayAccess {
  protected $data = array();
  public function offsetGet($offset) {
    return isset($this->data[$offset]) ? $data[$offset] : null;
  }
  public function offsetSet($offset, $value) {
    $this->data[$offset] = $value;
  }
  public function __toString()
  {
    return print_r($this->data);
  }
}

$a = new MyClass;
$a['item'] = 10;
$a['item2'] = 'adsf';
echo $a;
// Outputs Array( 'item' => 10, 'item2' => 'adsf' )

Javascript中有这样的东西吗?我希望能够在 Javascript 中创建一个迭代器类,但是可以通过使用括号表示法而不是使用get('item')/来访问这些项目,set('item2', 'asdf')因此它可以像数组而不是对象一样工作,但仍然具有我的构造函数中的所有函数( next、prev、is、reset 等)

我问这个是因为 AngularJS 在使用angular.element()时会返回一个对象(?),就像Object [div.id1]在 firebug 控制台中一样

4

1 回答 1

1

答案是肯定的,但不是在任何打算供公众使用的应用程序中。

ECMAScript 5 支持 'get' 和 'set' 声明(在已知属性上),并且在未来的修订版中将支持代理(它可以侦听对对象的任何更改),但是如果您的应用程序将支持 IE 任何东西或任何设备在用户不选择下载开发者浏览器并启用开发切换的情况下,您将不得不让很多用户落后几年(考虑智能手机的合同期限,而移动浏览器仍然没有) t 那里),或者实现旧版本并在 try-catch 子句中测试兼容性,因为使用这些功能否则可能会导致硬异常,或者只是不起作用,具体取决于。

因此,是的,但无论如何,您都必须以旧方式进行操作。

于 2013-04-25T01:44:39.357 回答