• 夺命雷公狗---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
  • 相关阅读:
    Ubuntu(Debian)的aptitude与aptget的区别和联系
    安装lxml相关
    解决Ubuntu 12.04更新后 ”系统的网络服务与此版本的网络管理器不兼容“问题
    Windows下配置Nginx代理Django
    scons入门笔记
    git仓库合并(向原有git仓库中加入新仓库)
    asterisk源码分析(main函数)
    live555源码编译(win7+vs2010)
    asterisk源码目录结构
    小试一题
  • 原文地址:https://www.cnblogs.com/leigood/p/5031958.html
Copyright © 2020-2023  润新知