zoukankan      html  css  js  c++  java
  • 夺命雷公狗---javascript NO:23 JavaScript中的this指针

    1、自定义类中的this指针

    在php中,我们在自定义类时,属性都是预定义在我们的自定义类中,而在JavaScript代码中,所有对象的属性和方法都是动态添加到对象中,那么可不可以让我们的自定义对象自动拥有类的属性和方法?

    答:可以,通过this指针

    例1:谁实例化自定义类,那么类中的this就指向谁

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=’utf-8′>
    <title></title>
    </head>
    <body>
    <script>
    function Person(){
    this.name = ‘lisi';
    this.age = 23;
    }
    var p1 = new Person();
    alert(p1.name);
    alert(p1.age);
    </script>
    </body>
    </html>

    例2:当我们创建第二个对象,会不会自动拥有name和age属性

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=’utf-8′>
    <title></title>
    </head>
    <body>
    <script>
    function Person(){
    this.name = ‘lisi';
    this.age = 23;
    }
    var p1 = new Person();
    var p2 = new Person();
    alert(p1.name);
    alert(p2.age);
    </script>
    </body>
    </html>

    例3:以上代码可以实现自定义对象自动拥有类中属性和方法,但是其违背事务逻辑,所有的自定义对象拥有的name和age属性都是一样的,改进上题:

     
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=’utf-8′>
    <title></title>
    </head>
    <body>
    <script>
    function Person(name,age){
    this.name = name;
    this.age = age;
    }
    var p1 = new Person(‘zhangsan’,22);
    var p2 = new Person(‘lisi’,’23’);
    alert(p1.name);
    alert(p2.age);
    </script>
    </body>
    </html>

    注:在我们的JavaScript代码中,函数的形参是不能设置默认值的,以下情况是不允许的(错误的)

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=’utf-8′>
    <title></title>
    </head>
    <body>
    <script>
    function Person(name,age=23){
    this.name = name;
    this.age = age;
    }
    var p1 = new Person(‘zhangsan’,22);
    var p2 = new Person(‘lisi’,’23’);
    alert(p1.name);
    alert(p2.age);
    </script>
    </body>
    </html>

    2、深入理解this指针

    结论:在我们的JavaScript全局作用域中,也是存在this指针的,其指向Window对象

    验证以上结论:

    例1:尝试理解下面两条语句:

    i=10;
    alert(this.i); //this->window==window.i    10

    例2:

    function test(){
    this.i=100;
    }
    i=10;
    test();
    alert(this.i); //100

    示例:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=’utf-8′>
    <title></title>
    </head>
    <body>
    <script>
    function test(){
    this.i = 100;
    }
    i = 10;
    test();
    alert(this.i);//100
    </script>
    </body>
    </html>

    例3:

    var i=100;
    function test(){
    i=200;
    }
    test()
    alert(i);  //200
  • 相关阅读:
    SentiAnalysis
    大数据索引技术 B+ tree vs LSM tree
    Regression, 回归问题
    Data Mining with R
    Why Vector Clock are Easy or Hard?
    How to know what an HRESULT code means?
    如何判断数据库表的某个列上有重复值的记录存在?
    关于SharePoint 2010里Servers in farm页面里status意义的澄清
    SharePoint Security系列 之二 CrossSite Request Forgery
    从MOSS2007升级到SharePoint2010后Report Server content types升级失败
  • 原文地址:https://www.cnblogs.com/leigood/p/5031958.html
Copyright © 2011-2022 走看看