素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

クラス変数、Object.clone、クロージャ

prototype使わないようにすればいいんじゃないかという話。

var base = function() {
  return function() {
    var name = "";
    return {
      say: function() {
        alert(name);
      },
      set name(str) {
        if (typeof str == "string" || str instanceof String) {
          return name = str;
        }
        return null;
      },
      get name() {
        return name;
      },
      plugin: function(fn) {
        this[fn.name] = eval(fn.toSource());
        return fn;
      }
    }
  } ();
}

var o = base();
o.name = "Hello,world";
o.say();
o.plugin(function say() {
  console.log(name);
});

o.say();

// ここから下はまだブラウザに実装されてないから想像。違ってるかも。
var p = Object.clone(o);
p.plugin(function plugin() {
  alert("プラグイン禁止><");
});

p.name = "aiueo";
p.say(); // "aiueo"
p.plugin(function plugin() {}); // "プラグイン禁止><"


参考: 関数一発でプロトタイプチェーンに繋げて、オブジェクトをクローンする。 - IT戦記