音の鳴るブログ

鳴らないこともある

最近考えた便利関数

JavaScriptにこういう関数あったら良いのに

辞書かどうか調べる

var isDictionary = function(object) {
    return typeof object === "object" && object.constructor === Object;
};

A は B のコンストラクタかどうか

プロトタイプ継承をしている前提で、instanceof したくないとき

var constructorof = function(ctor, klass) {
    var f = ctor && ctor.prototype;
    var p = klass.prototype;
    while (f) {
        if (f === p) {
            return true;
        }
        f = Object.getPrototypeOf(f);
    }
    return false;
};

プロトタイプ継承を自分のメンバーにする

プロトタイプ継承便利だけど、実行しながらプロトタイプ元の関数をがんがん書き換えることはあまり無いと思うので、全部手前に持ってきたら若干スピードアップする。誰かもっと良い関数名かんがえて下さい。

var mixinize = function(object) {
    var p = Object.getPrototypeOf(object);
    while (p.constructor !== Object) {
        var names = Object.getOwnPropertyNames(p);
        for (var i = names.length; i--; ) {
            if (names[i] === "constructor" || this.hasOwnProperty(names[i])) {
                continue;
            }
            Object.defineProperty(
                object, names[i], Object.getOwnPropertyDescriptor(p, names[i])
            );
        }
        p = Object.getPrototypeOf(p);
    }
};