zoukankan      html  css  js  c++  java
  • 悟透JavaScript——第一天

    《悟透JavaScript》作者李战,在博客园有文章。

    今天学习了第一部分 JavaScript真经的1~8节,对自己的学习进行下总结。

    1.JavaScript的基本类型:undefined,null,boolean,number,string;复杂类型object.

     typeof运算符可以获取一个javascript元素的类型,返回的结果是string类型的值,为“undefined”,“boolean”,“number”,"string","object"这5种之一

     注意:typeof(null)返回“object”

        typeof(NaN)和typeof(Infinity)返回“number”,NaN参与任何数值计算的结构都是NaN,而且NaN != NaN。Infinity/Infinity = NaN。

        undefined,null,"",0,false在逻辑上都为false,其他任何东西都为true。而这5个中只有undefined == null,其他之间互不相等。

        isNaN()函数测试一个变量是否未NaN

    2.JavaScript种对象的创建

     (1)JSON创建对象  创建一个空对象:var o = {};

                 创建一个对象并设置属性或方法及初始值: var speaker = {text:"Hello World", say:function(){alert(this.text)}};

     (2)new创建对象    function MyFunc() {}; var anObj = new MyFunc();

      其他:javascript中对象可以动态的添加或删除属性和方法 

    function Sing()
    {
    with(arguments.callee)
    alert(author + ":" + poem);
    };
    Sing.author = "李白";
    Sing.poem = "汉家秦地月,流影照明妃。一上玉关道,天涯去不归";
    Sing();
    Sing.author = "李战";
    Sing.poem = "日出汉家天,月落阴山前。女儿琵琶怨,已唱三千年";
    Sing();

         遍历对象的所有属性和方法 for(var s in anObject);

    3.javascript函数

      函数的建立有两种形式“定义式”和“变量时”

      javascript的“预编译”:1.所有var变量的创建(初始值为undefined)

                  2.“定义式”函数优先“执行”

      以下是两个代码的区别:

       var myfunc = function ()
    {
    alert("hello");
    };
    myfunc(); //第一次调用myfunc,输出hello

    myfunc = function ()
    {
    alert("yeah");
    };
    myfunc(); //第二次调用myfunc,将输出yeah
        function myfunc ()
    {
    alert("hello");
    };
    myfunc(); //这里调用myfunc,输出yeah而不是hello

    function myfunc ()
    {
    alert("yeah");
    };
    myfunc(); //这里调用myfunc,当然输出yeah

      注意:var定义的是作用域的一个变量(在另外一个作用域[函数]该变量无定义undefined)

         而没有“var”的标示符却可能是全局根对象的一个属性(全局变量)。

      函数caller属性:假如为null则表示函数没有被调用或者被全局代码调用,否则输出被调用的函数(类似toString())

    4.javascript中的this与call函数

       function WhoAmI()       //定义一个函数WhoAmI
    {
    alert("I'm " + this.name + " of " + typeof(this));
    };

    WhoAmI(); //此时是this当前这段代码的全局对象,在浏览器中就是window对象,其name属性为空字符串。输出:I'm of object

    var BillGates = {name: "Bill Gates"};
    BillGates.WhoAmI = WhoAmI; //将函数WhoAmI作为BillGates的方法。
    BillGates.WhoAmI(); //此时的this是BillGates。输出:I'm Bill Gates of object

    var SteveJobs = {name: "Steve Jobs"};
    SteveJobs.WhoAmI = WhoAmI; //将函数WhoAmI作为SteveJobs的方法。
    SteveJobs.WhoAmI(); //此时的this是SteveJobs。输出:I'm Steve Jobs of object

    WhoAmI.call(BillGates); //直接将BillGates作为this,调用WhoAmI。输出:I'm Bill Gates of object
    WhoAmI.call(SteveJobs); //直接将SteveJobs作为this,调用WhoAmI。输出:I'm Steve Jobs of object

    BillGates.WhoAmI.call(SteveJobs); //将SteveJobs作为this,却调用BillGates的WhoAmI方法。输出:I'm Steve Jobs of object
    SteveJobs.WhoAmI.call(BillGates); //将BillGates作为this,却调用SteveJobs的WhoAmI方法。输出:I'm Bill Gates of object

    WhoAmI.WhoAmI = WhoAmI; //将WhoAmI函数设置为自身的方法。
    WhoAmI.name = "WhoAmI";
    WhoAmI.WhoAmI(); //此时的this是WhoAmI函数自己。输出:I'm WhoAmI of function

    ({name: "nobody", WhoAmI: WhoAmI}).WhoAmI(); //临时创建一个匿名对象并设置属性后调用WhoAmI方法。输出:I'm nobody of object


      像BillGates.WhoAmI()这种形式是传递this参数最常规的形式,此时的this就是函数所属的的对象本身。

      下面是百度知道中对call的一段分析

    标准解释:call方法是将一个对象的方法在另一个对象的上下文环境中执行。

    详细解释:你的例子中,myFun.call(myObject, 13, 3, 95)执行时是这样的:
    1. 调用myFun函数
    2. 将13,3,95三个参数传递给它(你的myFun方法中没有处理这些参数的代码,所以传了也没有用)
    3. 将myFun函数中的所有this用myObject代替(同样,你的myFun函数中没有使用this,所以执行结果和直接调用myFun()是一样的)

    修改一下你的例子,帮助你理解:
    function myFun(p1, p2, p3)
    {
    this.para1 = p1;
    this.para2 = p2;
    this.para3 = p3;
    }

    var myObject = new Object();

    alert(myObject.para1) //显示undefined

    myFun.call(myObject,13,3,95); /*执行的时候,myFun方法中的this全部用myObject对象代替,所以在这个例子中,执行myFun方法和直接写下面的语句效果是一样的:
    myObject.para1 = 13;
    myObject.para2 = 3;
    myObject.para3 = 95;
    */

    alert(myObject.para1) //显示13





  • 相关阅读:
    GridView动态创建TemplateField的回发问题
    ASP.NET页面生命周期
    php图片叠加
    php文件下载
    mysql 常用操作命令
    转载:图解SQL的Join
    利用iframe来做无刷新上传
    php抽象和接口的区别
    php 循环打开目录读取文件
    mysql存储引擎的对比(一)
  • 原文地址:https://www.cnblogs.com/yangqionggo/p/2253231.html
Copyright © 2011-2022 走看看