クラス変数、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() {}); // "プラグイン禁止><"