美文网首页干货
JavaScript 解惑

JavaScript 解惑

作者: jProvim | 来源:发表于2014-05-10 01:15 被阅读326次

俗話說"挖坑容易, 填坑難", 可能不是坑, 走的人多了也就變成了坑. 哎, 且看我能為後人填多少坑吧, 能填多少是多少吧.

坑: this

JavaScript裡面的坑真的是很多啊, 比如說 this, 估計就難道了很多人. 其實很簡單, 就是無論是誰call的這個對象, this就refer它了.

  1. 在定義函數function的時候, this指的是window
  2. 在Object裏面定義函數的時候, this指的是這個Object
  3. 在定義內函數的時候, this 指的是window. (內函數不傳遞this)

例子(jQuery):

做練習, 圖方便, 沒有下載到本地, 直接load網上的


``` javascript 
(function(){
    var obj = {
      doIt: function(e){
          console.log(this);
          e.preventDefault();
      }
    };
    $('a').on('click',  obj.doIt); 
})();

這裡的this指的是, anchor, 因為是a叫的function 'obj.doIt'

(function(){
    var obj = {
      doIt: function(){
          console.log(this);
      }
    };
    $('a').on('click', function(e){
        obj.doIt();
        e.preventDefault();
    });
})();

這裡的this指的是, obj本身, 因為沒有任何東西傳入到obj.doIt()裡面去.

如果還是聽不懂額, 這麼多選擇到底怎們辦啊?
對於新手來說, jQuery指出了一條簡潔的道路, 那就是用這個
$('a').on('click', $.proxy(obj.doIt, obj)); 把特定的Object傳入進去, 可以refer API. 當然, 這裡的this, 永遠都refer後面的obj.

坑: call 和 apply

call和apply之間有什麼區別? 據我所致, 毛線都沒有.
僅僅是兩個不同function的名字了, 比如說 裡面 vs 裏面.

  1. call的第二個及以後的parameter接受的是單獨的parameter.
  2. apply的第二個parameter接受到的是array(數組).
call(this, a,b,c,d);
apply(this, [a,b,c,d]);

坑: css 和 animate

這個算是jQuery裡面獨有的吧. css沒有反映時間, 效果是立即呈現的; animate 與之相反, 但是"只有数字值可创建动画(比如 "margin:30px")。字符串值无法创建动画(比如 "background-color:red")。"

例子

    $('button').on('click', function () {
       box.css({
           'left': w,
           'top': h
           'position': 'absolute'
       })
    });

效果立顯. 位置, 方式等全部都改變.

    $('button').on('click', function () {
       box.animate({
           'left': w,
           'top': h
           'position': 'absolute'
       })
    });

相反, 只有位置改變, 方式不改變(position 無效).

坑: 本地圖片 vs 網絡圖片

做練習, 偷懶沒有將圖片下載到本地, 直接調用網絡上的圖片, 如下

        <div class="slider">
            <ul>
                <li>
                    <img src="https://octodex.github.com/images/saritocat.png" alt="saritocat"/>
                </li>
                <li>
                    <img src="https://octodex.github.com/images/topguntocat.png" alt="labtocat"/>
                </li>
                <li>
                    <img src="https://octodex.github.com/images/octoliberty.png" alt="octoliberty"/>
                </li>
                <li>
                    <img src="https://octodex.github.com/images/twenty-percent-cooler-octocat.png" alt="21"/>
                </li>
            </ul>
        </div>

用這個方法

    var sliderUL = $('div.slider').css('overflow', 'hidden').children('ul'),
        imgs = sliderUL.find('img'),
        imgWidth = imgs[0].width,
        console.log('pic width: '+imgs[0].width);

imgWidth為0, 將圖片換位本地後, 算出正常width, 又是jQuery的一個坑. 當然了, 另外一個解決方法就是將function傳入window.load之後.

$(window).load(function() {
     // content
});

順便提一句, $(document).ready(function(){})$(window).load(function(){})的區別就是, 前者是DOM ready, 後這是content ready, 比如說圖片.

相关文章

  • JavaScript 解惑

    俗話說"挖坑容易, 填坑難", 可能不是坑, 走的人多了也就變成了坑. 哎, 且看我能為後人填多少坑吧, 能填多少...

  • 解惑ECMAScript/JavaScript/TypeScri

    Ecma 是国际计算机制造商协会。在1994年之前,全名为欧洲计算机制造商协会(European Computer...

  • 自我解惑---JavaScript原型链,涉及new,typeo

    验证上图原型链是否正确 对象拥有 “proto” 属性,函数没有此属性,函数则拥有 prototype属性对象可由...

  • 解惑

    今天在听音频的时候,听到老师说你所看到的,要么是你想要的,要么是你所厌恶的。突然有点想明白一件事了。 ...

  • 解惑

    我是一个刚步入社会的菜鸟,我有很多迷惑,也有很多委屈,更多的是迷茫。一天天看着自己消沉,内心是烦躁的。但是我除了烦...

  • 解惑

    当自己静下来时总会想,为什么什么事都没做,但时间就是不够用呢?而且每当年长一岁,这种感觉也越强烈。现在一个人...

  • 解惑

    上周的作文我提出焦虑,因为学习时间不够的原因,让我产生了极大的焦虑。凑巧的事,上周Claire战友的作业跟我的...

  • 解惑

    最近在学驾驶,不喜欢但也得学了,星期六在驾校上堂安全课,看着那些事故场面,让我不由想到佛陀的四法印其中一个:诸形无...

  • 解惑

    辞别墨客寻花去,却迎山风不解怀。 儿童急走无觅处,黛擎黄蝶有片海。 悟得道中佛自在,方知万物一脉来。 是日辗转千余...

  • 解惑:

    世人被财所迷眼,钱是魔鬼众生缠。 应求温饱争自在,不可丧志争苟全! 一日三餐灌满肠,梦不心惊睡的安。 龟虽长寿终化...

网友评论

    本文标题:JavaScript 解惑

    本文链接:https://www.haomeiwen.com/subject/dlirtttx.html