在同一对象中使用对象的方法

时间:2015-09-06 19:47:34

标签: javascript html css object

需要帮助。我有一个名为Rigged的库,类似于jQuery。 这段代码不完整,它只是我代码的一个例子(我的lib还有超过500行)

private RadioTwoFragment radioFragment;

所以,我调用switch (checkedId) { case R.id.radio1: radioFragment = new RadioOneFragment(); getFragmentManager().beginTransaction() .replace(R.id.radio_frg_container, radioFragment) .commit(); break; case R.id.radio2: radioFragment = new RadioTwoFragment(); getFragmentManager().beginTransaction() .replace(R.id.radio_frg_container, radioFragment) .commit(); break; } 方法或(function () { var arr = []; var Rigged = function ( selector ) { return Rigged.fn.init( selector ); }; Rigged.fn = Rigged.prototype = { map: function ( callback ) { var results = arr, i = 0; for ( ; i < this.length; i++) { results.push(callback.call(this, this[i], i)); } return results; }, each: function (callback) { return this.map(callback); }, // this is just example of my code css: function (attr, value) { if (attr == 'display') { return this.each(function (current) { current.style.display = value; }); } }, hide: function () { return this.each(function (current) { // here's a problem current.css('display', 'none'); }); } }; Rigged.init = Rigged.fn.init = function (selector) { var elset, i = 0; if (typeof selector === "string") elset = document.querySelectorAll(selector); else if (...) .... etc this.length = elset.length; for ( ; i < this.length; i++) { this[i] = elset[i]; } return this; } Rigged.ajax = Rigged.fn.ajax = function ( obj ) { // code here } window.Rigged = window.$ = Rigged; }()); 没有问题,但是在名为map的方法的定义中,它会输出错误未捕获的TypeError:current.css不是控制台中的一个功能

当我在each之类的索引文件中调用hide时,它可以正常工作,但在css中它无效。当我用$("#text").css('display', 'none);替换行Rigged.prototype时,它正常工作。

有人可以告诉我为什么current.css('display', 'none');方法不起作用吗?

EDITED .map()方法 + e(回调)到当前

2 个答案:

答案 0 :(得分:0)

这是解决方案。

       hide: function () {
            // Try to log `this`
            console.log( this );

            /*return this.each(function (current) {
                current.css('display', 'none');
            });*/

            this.css('display', 'none');
        }

当您致电.each()时,您正在运行.hide()两次。一个在.hide()本身,第二个在.css(),这就是问题所在。

答案 1 :(得分:0)

您正在向对象添加DOM节点,而不是类似jQuery的对象,dom节点。

当您映射每个元素时,将 DOM元素传递给回调函数:

results.push(callback.call(this, this[i], i));
//-------------------------------^^^^^^^ here

当你这样做时

current.css('display', 'none');

.hide()方法中,您尝试在没有此类方法的DOM元素上调用.css(),因此您会收到错误。