ぼちぼち技術開発 主にjs,java等
new Hoge();
などといったコードを書かずとも、単に
Hoge();
とするだけでオブジェクトを作ることが出来るのです。これは、関数Hogeが内部で
new Hoge();
のようなものを呼び出しているからに他なりません。phina.jsのソースコードを見ると、以下のような場所があります。
var _class = function() {
var instance = new _class.prototype._creator();
_class.prototype.init.apply(instance, arguments);
return instance;
};
new _class.prototype._creator()
を代入しています。これが全てのphina.jsのオブジェクトの元です。ただ、この特性上、Chromeのデバッガなどではphina.jsのオブジェクトの型は全て
"_class._creator"
と表示されてしまいます。その代わりに、phina.jsのオブジェクトは皆classNameプロパティーを持っています。このプロパティーの値を見ることで、そのオブジェクトの型が分かります。
object.$method('accept', function() {});
object.accept = function() {};
object.getter('x', function() {return this._x;);
object.setter('y', function(y) {this._y = y;});
object.accessor('z', {
get: function() {return this._z;},
set: function(z) {this._z = z;}
});
Object.defineProperty(object, 'x', {
get: function () {return this._x;},
enumerable: false
});
Object.defineProperty(object, 'y', {
set: function (y) {this._y = y;},
enumerable: false
});
Object.defineProperty(object, 'z', {
get: function () {return this._z;},
set: function (z) {this._z = z;},
enumerable: false
});
var object = {
a: "foo",
b: "bar"
};
object.forIn(function(key, value, index) {
console.log(this+"."+key+": "+value+"("+index+")");
});
[object Object].a: foo(0)
[object Object].b: bar(1)
var object = {a: "foo", b: "bar"};
object.$extend({b: "foo", c: "bar"}));
// object === {a: "foo", b: "foo", c: "bar"}
var object = {a: "foo", b: "bar"};
object.$safe({b: "foo", c: "bar"}));
// object === {a: "foo", b: "bar", c: "bar"}
var array = Array.prototype.from(obj);
としても問題ありません。