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 + ‘\n‘ + ‘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();

时间: 2024-08-07 21:24:39

JavaScript之this,new,delete,call,apply(转)的相关文章

JavaScript中的bind,call和apply函数的用法和区别

一直没怎么使用过JavaScript中的bind,call和apply, 今天看到一篇比较好的文章,觉得讲的比较透彻,所以记录和总结如下 首先要理解的第一个概念,JavaScript中函数调用的方式,总结下来,有以下4种 1. 方法调用 2. 正常函数调用 3. 构造器函数调用 4. apply/call 调用 要明白的第2个概念, JavaScript 中的函数,无论是上面哪种函数调用方式,除了你函数声明时定义的形参外,还会自动给函数添加两个形参,分别是this 和 arguments 要明白

javascript之this、new、apply和call详解

this.new.call和apply的相关问题 讲解this指针的原理是个很复杂的问题,如果我们从javascript里this的实现机制来说明this,很多朋友可能会越来越糊涂,因此本篇打算换一个思路从应用的角度来讲解this指针,从这个角度理解this指针更加有现实意义. 下面我们看看在java语言里是如何使用this指针的,代码如下: public class Person { private String name; private String sex; private int ag

JavaScript中bind、call、apply函数用法详解

在给我们项目组的其他程序介绍 js 的时候,我准备了很多的内容,但看起来效果不大,果然光讲还是不行的,必须动手.前几天有人问我关于代码里 call() 函数的用法,我让他去看书,这里推荐用js 写服务器的程序猿看<javascript编程精粹> 这本书,crockford大神果然不是盖的.之后我在segmentfault上又看到了类似的问题,那边解答之后干脆这里记一笔. 首先,关于 js 定义类或对象的方法,请参看w3school 的这里的这里,写的非常详细和清晰,我不再赘言了. 为了介绍 b

Javascript的变量与delete操作符

原文:http://charlee.li/javascript-variables-and-delete-operator.html 刚刚看到一篇好文(原文链接), 对Javascript中的delete操作符分析得很透彻.在这里简单地介绍一下内容. 虽然是一个小小的delete操作符,其行为却异常复杂. # Javascript的变量 实际上Javascript中,变量 = 对象属性,这是因为 Javascript 在执行脚本之前 会创建一个Global对象,所有的全局变量都是这个Global

javascript中this、new、apply和call详解

如果在javascript语言里没有通过new(包括对象字面量定义).call和apply改变函数的this指针,函数的this指针都是指向window的,重要的话要说三遍.... 讲解this指针的原理是个很复杂的问题,如果我们从javascript里this的实现机制来说明this,很多朋友可能会越来越糊涂,javascript里的this指针逻辑上的概念也是实例化对象,这一点和c#语言里的this指针是一致的,但是javascript里的this指针却比c#里的this难以理解的多,究其根

JavaScript(9)——call与apply

call与apply call和apply方法可以通过函数名称来调用函数.有两个参数 call()方法与apply()方法的作用相同,他们的区别仅在于接收参数的方式不同. [call] 调用一个对象的一个方法,以另一个对象替换当前对象. call()方法是与经典对象冒充方法最相似的方法.他的第一个参数用作this对象,其他参数都直接传递给函数自身. 对于call而言,第一个参数是上下文对象,第二个参数是不同的函数参数. call是通过参数列表来完成传递, 其他与apply没有区别 [apply]

201510142342_《JavaScript数组对象的拼接,apply》

var array1 = [1,2]; var array2 = [3,4]; array1.push(5,6);//[1,2,5,6] array1.push([7,8]);//[1,2,5,6,[7,8]] Array.prototype.push.apply(array1,array2);//[1,2,5,6,[7,8],3,4]   fun.apply(this,array);   //在this的作用域下,将array参数传入fun;若this = null时,为全局:

Javascript中bind、call、apply函数用法

js 里函数调用有 4 种模式:方法调用.正常函数调用.构造器函数调用.apply/call 调用. 同时,无论哪种函数调用除了你声明时定义的形参外,还会自动添加 2 个形参,分别是 this 和arguments. arguments 不涉及到上述 3 个函数,所以这里只谈 this.this 的值,在上面 4 中调用模式下,分别会绑定不同的值.分别来说一说: 方法调用: 这个很好理解,函数是一个对象的属性,比如 var a = { v : 0, f : function(xx) { this

javaScript 工作必知(十) call apply bind

call  每个func 都会继承call apply等方法. function print(mesage) { console.log(mesage); return mesage; } print.call(this, "cnblogs");//cnblogs call(thisAgr,agr1,agr2...) ,call方法第一个传递一个context上下文.后面是参数的个数. apply apply(thisAgr,[agr1,agr2]),apply方法和call的用法一样

深入javascript: in 和 delete 运算符

一.in操作符1.定义 如果指定的属性存在于指定的对象中,则in运算符会返回true.(如果一个属性是从原型链上继承来的,in运算符也会返回true) 2.数组操作 //数组 var arr = ["ben","Ben","benjamin","Benjamin"]; console.log(arr); console.log(0 in arr); //true console.log(2 in arr); //true co