+ -
当前位置:首页 → 问答吧 → js求助,还有个小问题

js求助,还有个小问题

时间:2010-06-01

来源:互联网

show: function() {
      var that = this;
      this.each(function(el) {
        that.setStyle('display', 'block');
      });
      return this;
    },

  _$.prototype的show方法

这里的that有什么用
为什么要写这个(书中的源码)

ps:初学者看到什么比较好,感觉自己有点笨。。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT="EditPlus"> <META NAME="Author" CONTENT=""> <META NAME="Keywords" CONTENT=""> <META NAME="Description" CONTENT=""> </HEAD> <BODY> <INPUT TYPE="text" NAME="" id="t" value='123456'> <INPUT TYPE="text" NAME="" id="u" value='abcdef'> <div id="test-1" >123</div> <div id="test-2">qwe</div> </BODY> <SCRIPT LANGUAGE="JavaScript"> <!-- (function() { function _$(els){ this.elements=[]; for(var i=0;i<els.length;i++){ if(typeof els[i]==='string') this.elements.push(document.getElementById(els[i])) else this.elements.push(els[i]) } } _$.prototype = { each: function(fn) { for ( var i = 0, len = this.elements.length; i < len; ++i ) { fn.call(this, this.elements[i]); } return this; }, setStyle: function(prop, val) { this.each(function(el) { el.style[prop] = val; }); return this; }, show: function() { var that = this; this.each(function(el) { that.setStyle('display', 'block'); }); return this; }, addEvent: function(type, fn) { var add = function(el) { if (window.addEventListener) { el.addEventListener(type, fn, false); } else if (window.attachEvent) { el.attachEvent('on'+type, fn); } }; this.each(function(el) { add(el); }); return this; } }; window.$ = function() { return new _$(arguments); }; })(); $(window).addEvent('load', function() { $('test-1', 'test-2').show(). setStyle('color', 'red'). addEvent('click', function(e) { alert(this.innerHTML) //$(this).setStyle('color', 'green'); }); }); //--> </SCRIPT> </HTML>
 提示:您可以先修改部分代码再运行
[ 本帖最后由 su1216 于 2010-6-1 13:28 编辑 ]

作者: su1216   发布时间: 2010-06-01

if(typeof els[i]==='string')
                     this.elements.push(document.getElementById(els[i]))
这里,你要参数是个 string,你下面又是个 $(window),有用才怪啊
加一行 else this.elements.push(els[i]) 搞定

作者: aolu11   发布时间: 2010-06-01

汗。。。
这个。。。。
不好意思

作者: su1216   发布时间: 2010-06-01

$(window).addEvent('load', function() {
  $('test-1', 'test-2').show().
    setStyle('color', 'red').
    addEvent('click', function(e) {
       alert(this.innerHTML)
      //$(this).setStyle('color', 'green');
    });
});

火狐下好使,ie8不好使
应该怎么改一下,为什么

作者: su1216   发布时间: 2010-06-01

LZ你初学者的话....你看的书对你来说太深了...

作者: aolu11   发布时间: 2010-06-01

那有没有什推荐呢
深点就深点吧,反正有大家呢,^_^

作者: su1216   发布时间: 2010-06-01

show: function() {
      var that = this;
      this.each(function(el) {
        that.setStyle('display', 'block');
      });
      return this;
    },

  _$.prototype的show方法

这里的that有什么用
为什么要写这个(书中的源码)

作者: su1216   发布时间: 2010-06-02

自己顶一下。。。

作者: su1216   发布时间: 2010-06-03

自已懂点,但是不精,看不出来 帮你顶

作者: ycookie   发布时间: 2010-06-03

不用想了, 其实是一样的

你把that改成 this , 效果是一样的, 都是 new _$() 对象

each: function(fn) {
      for ( var i = 0, len = this.elements.length; i < len; ++i ) {
        fn.call(this, this.elements[i]);
      }
fn.call( this, ...); //这里把this指针传了过去, 所以在fn中,this仍然是 _$对象
      return this;
    },

作者: carkey712   发布时间: 2010-06-03

你把that改成 this , 效果是一样的, 都是 new _$() 对象

我知道
我只是想知道为什么要这么写

作者: su1216   发布时间: 2010-06-03

$(window).addEvent('load', function() {
  $('test-1', 'test-2').show().
    setStyle('color', 'red').
    addEvent('click', function(e) {
       alert(this.innerHTML)
      //$(this).setStyle('color', 'green');
    });
});

火狐下好使,ie8不好使
应该怎么改一下,为什么

作者: su1216   发布时间: 2010-06-03

相关阅读 更多

热门下载

更多