小程序教程

javascript忍者秘籍pdf文字版免费下载(2)

字号+ 作者:H5之家 来源:H5之家 2017-06-18 15:06 我要评论( )

Listing 3.4 Using a constructor to set up common objects function Ninja(){ this.skulk = function() { return this;} } var ninja1 = new Ninja(); var ninja2 = new Ninja(); assert(ninja1.skulk() === ninj

Listing 3.4 Using a constructor to set up common objects   function Ninja(){       this.skulk = function() { return this;}   }   var ninja1 = new Ninja();   var ninja2 = new Ninja();   assert(ninja1.skulk() === ninja1, "The 1st ninja is skulking");   assert(ninja2.skulk() === ninja2, "The 2nd ninja is skulking");   

在这个例子中,我们创建了一个构造函数 Ninja(),当我们利用 new 关

键字来调用它的时候, 

一个空的对象实例会被创造出来并传递道函数中作为 this 存在。 

这个构造器同时创建了 skulk 属性,并将此属性作为一个方法赋予给它

创造出的新的对象实例。 

我们调用了两次构造函数,并产生了 ninja1 和 ninja2 两个不同的实例

对象。 

当我们想写一个构造函数的时候,函数的写法会和普通的函数很不一样,

让我们接下来详细讨论下。 

函数的编写: 

构造函数的目的是用来初始化一个新的对象。 

当然构造函数也可以和普通函数一样被调用或者象方法一样先赋给一

个对象的属性然后调用。 

例如,我们可以这样调用 Ninja()函数: var whatever = Ninja(); 但是结果就变成,skulk 属性被赋予到了 window 上,并且 window 会被

return 并存储在 whatever 中。 

由于构造函数的代码和调用模式和其他函数不同,所以一般不会用 new

之外的方式来调用一个构造函数。 

如何来标示一个函数是否为构造函数呢? 

一般小写字母开头的函数名字就是普通函数例如 skulk(),

creep(),sneak(),doSomethinWonderful()等等, 

大写字母开头的既是构造函数,

Ninja(),Samurai(),Ronin(),KungFuPanda()等等。 

3.3.5 Invocation with the apply and call methods 

到目前为止,我们看到不同的函数调用模式之间最大的差异之处在于,

函数上下文的不同,即隐性的 this 参数。 

函数调用模式中,this 为 window 

方法调用模式中,this 为方法所属的对象 

构造器调用模式中,this 为创建的新对象 

但是,如果我想要让 this 成为任意我希望的对象,如何做到呢? 

如何能够显性操作? 

利用 APPLY 和 CALL 方法(USING THE APPLY AND CALL METHODS) JavaScript 提供给我一种途径,我们可以用任何对象作为函数上下文,

并将它显性的操作。 

这个途径就是通过每个函数都具备的方法:apply()和 call() 

是的,所谓每个函数自身具备的方法,即:函数作为自然类型的对象

(firs-class objects),函数可以拥有属性,包括方法(methods) 

当我们通过 apply()来调用一个函数的时候,我们需要传递两个参数给

apply(): 

第一个参数:用于作为函数上下文的对象; 

第二个参数:一个参数数组 

另外 call()是另一个更加简单的形式,我们只需要传递 argment list 来代

替参数数组 

例 3.5 展示了这两个方法: 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • C#入门经典第5版本下载pdf版【京东商城】

    C#入门经典第5版本下载pdf版【京东商城】

    2017-05-02 16:01

网友点评