4

jQuery オブジェクトを調べていると、x.fn.x.init. または、このページe.fn.e.initでは 、 whereとして縮小されていますが、2 番目のorがx === e === jQuery何であるかはわかりません。ex

これを考慮してください: このページのコンソールで:

$
>> function (a,b){return new e.fn.init(a,b,h)}

[$()]
>> [e.fn.e.init[0]]

0 は、配列のような jQuery オブジェクトの長さです。しかし、どうやってe.fn.initにたどり着くのe.fn.e.initでしょうか? 2 番目の e は何ですか?

アップデート

縮小されていないバージョンを自分のページに含めたところ、jQuery.fn.jQuery.init. jQueryなぜそこに2回あるのか本当に混乱しています。

コンソールで試しjQuery === jQuery.fn.jQueryたところ、false が返されます。実際、jQuery.fn.jQuery未定義です。変...

4

1 に答える 1

1

Google のコンソール API リファレンスには明確な説明が見つかりませんでしたが、理解したいと思ったので、ここに私の結論を示します。

これは、質問のコンテキストで興味深いものだけを保持して、jQuery で何が起こっているかを簡略化したものです。

var jQuery = function() {
    return new jQuery.fn.init();
};

jQuery.fn = jQuery.prototype = {
    init: function() {
        return this;
    }
};
var j = jQuery();
console.log(j);
>> jQuery.fn.jQuery.init {} 

コンソールでオブジェクトをログに記録するとき、Chrome は、オブジェクトがコードでどのように設定されたかに応じて、ある種の内部識別子を表示します。これは、オブジェクトが作成された名前空間でのオブジェクトの構造のある種の表現です。fn とプロトタイプ (つまりjQuery.prototype = jQuery.fn = {...) を逆にすると、jQuery.fn.initではなくとして出力されjQuery.fn.jQuery.initます。

不思議なことに、(jQuery のように) 配列のようなプロパティを追加すると、コンソールでオブジェクトが異なって表示されます。lengthプロパティの削除/追加を試みましたが、数値型の値を持つプロパティと関数型の値を持つプロパティを追加するspliceと、オブジェクトがコンソールに配列のように表示されます (角括弧付き)。

var jQuery = function() {
    return new jQuery.fn.init();
};

jQuery.fn = jQuery.prototype = {
    init: function() {
        return this;
    },
    length: 0,
    splice: function(){}
};
jQuery.fn.init.prototype = jQuery.fn;

var j = jQuery();
console.log(j);
>> [init: function, splice: function]

ですから、Chrome がオブジェクトの「名前」を出力する方法や、それをフォーマットする方法にはあまり注意を払うべきではないと思います...

于 2013-11-20T16:01:30.040 に答える