Adrien Friggeri씨는 IE를 제외한 대부분의 브라우저에서 제공하는 진정한 get, set, catchall을 좋아해서, 예제를 보고 에뮬레이팅 계층을 작업했습니다:
[code:js]
var o = CGSobject(function (x) { return x+1; });

// basic set
o("a", 7);

// basic get
print(o("a"));
// -> 7

// getter
o("b", {get: function () { return this.a+1;}});
print(o("b"));
// -> 8

// setter
o("c", {set: function (x) { this.a = x / 2 }});
o("c", 50);
print(o("a"));
// -> 25

// catchall
print(o(2));
// -> 3

print(o("foo "));
// -> "foo 1"
이를 위해 사용한 코드입니다:
[code:js]
function CGSobject (catchall) {
  var o = function (k,v) {
    if (v) {
      var curv = o.content[k];
      (curv && curv.set && curv.set.call(o.content,v)) || (o.content[k] = v);
    } else {
      var v = o.content[k] || o.catchall(k);
      return (v.get && v.get.call(o.content)) || v;
    }
  }
  o.content = {};
  o.catchall = catchall || function () { return null };

  return o;
}

from Emulating get, set, catchall for all browsers on Ajaxian
Posted by 행복한고니 트랙백 0 : 댓글 0

댓글을 달아 주세요