• JavaScript之this,new,delete,call,apply(转)


    JavaScript之this,new,delete,call,apply

    1.this

    一般而言,在Javascript中,this指向函数执行时的当前对象。

    2.new

    在JavaScript中,使用new关键字后,意味着做了如下四件事情:

    • 创建一个新的对象,这个对象的类型是object
    • 设置这个新的对象的内部、可访问性和[[prototype]]属性为构造函数(指prototype.construtor所指向的构造函数)中设置的;
    • 执行构造函数,当this关键字被提及的时候,使用新创建的对象的属性;
    • 返回新创建的对象(除非构造方法中返回的是‘无原型’)。

    3.delete

     delete操作符通常用来删除对象的属性,而不是一般的变量或者是函数。

    4.call

    应用于:Function 对象
    调用一个对象的一个方法,以另一个对象替换当前对象。
    call([thisObj[,arg1[, arg2[,   [,.argN]]]]])
    参数:
    thisObj 
    可选项。将被用作当前对象的对象。 
    arg1, arg2, , argN 
    可选项。将被传递方法参数序列。 
    说明:
    call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

    5.apply

    call, apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例,也就是每个方法都有call, apply属性.既然作为方法的属性,那它们的使用就当然是针对方法的了.这两个方法是容易混淆的,因为它们的作用一样,只是使用方式不同.

    Function.apply(obj,args)方法能接收两个参数
    obj:这个对象将代替Function类里this对象
    args:这个是数组,它将作为参数传给Function(args-->arguments)

    6.运行调试一下JS代码,有助于对以上概念的理解。

    复制代码
    <html>
    <body>
        <script>
            function Base(){
                this.name = 'Base';
                this.age = 1;
                this.show = function(){
                    alert('Name:' + this.name + '
    ' + 'Age:' + this.age.toString());
                };
                this.reset = function(name, age){
                    this.name = name;
                    this.age = age;
                };
                
                alert(this);
            }
            
            function A(){
                this.name = 'A';
                this.age = 1;
            }
            
            Base();
            var base = new Base();
            
            var isDeleted = delete base;
            alert('delete base: ' + isDeleted);//delete无效
            base.show();
            isDeleted = delete base.name;
            alert('delete base.name: ' + isDeleted);//delete有效
            base.show();
            
            base = new Base();
            var a = new A();
            base.show.call(a);
            base.show.apply(a);
            base.reset.call(a, 'AA', 11);
            base.show.call(a);
            base.reset.apply(a, ['AAA', 111]);
            base.show.apply(a);
        </script>
    </body>
    </html>
    复制代码

     7.使用call来实现类的继承。代码如下,在类B的构造函数里面调用“Base.call(this);”,则B可以使用Base里面的方法和属性。

    复制代码
            function B(){
                Base.call(this);
                this.name = 'B';
                this.age = 2;
            }
            
            var b = new B();
            b.show();
    复制代码
  • 相关阅读:
    DBC的故事
    MDF,了解一下
    PAT A 1059 Prime Factors (25分)
    素数的判断与素数表的获取
    PAT A 1014 Waiting in Line (30分)
    n皇后问题(全排列+回溯)
    最长回文子串(c++)
    传输方式的分类
    OSI模型概述
    进制转换
  • 原文地址:https://www.cnblogs.com/Rozdy/p/4544597.html
Copyright © 2020-2023  润新知