博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

javascript:Functions (1)

Posted on 2011-07-08 18:28  ritazhou  阅读(673)  评论(3编辑  收藏  举报

函数对象 Function Object

函数就是对象。对象字面量产生的对象链接到Object.prototype。函数对象链接到Function.prototype。每个函数在创建时附有两个附件的隐藏属性:函数的上下文和实现函数行为的代码。

函数字面量 Function Literal

函数对象可以通过函数字面量来创建。

var add = function(a, b){return a+b;};

调用 Invocation

除了声明时定义的形式参数,每个函数接收两个附加的参数:this 和arguments。

this在面向对象编程中非常重要,它的值取决于调用的模式。在JS中,一共有四种调用模式,这些模式在初始化参数this上存在差异。

1、方法调用模式

2、函数调用模式

3、构造器调用模式

4、apply调用模式

方法调用模式 The Mehtod Invocation Pattern

当一个函数被保存为一个对象的属性并且被调用时,this绑定到该对象。

通过this可取得他们所属对象的上下文的方法称为公共方法。

var myObject = {
value :
0,
increment:function(inc)
{
this.value += (inc);
}
};
myObject.increment(
3);
myObject.increment(
3);
alert(myObject.value);
//result is 6.

函数调用模式 The Function Invocation Pattern

在函数调用模式下,this被绑定到全局对象上。这个是javascript语言设计上的一个错误。

看如下code:

var g='globle';
var o
=function()
{
var g
= 'self';
alert(
this.g);
}();
//result is 'globle'. it is not correct.

可以采用以下方法避免

var g='globle';
var o
=function()
{
var that
= this;
that.g
='self';
alert(
this.g);
}();
//result is 'self', it is correct.

构造器调用模式 The Consultant Invocation Pattern

js是居于原型继承的语言,所以对象可以从其他对象直接继承属性。该语言是无类别的。

如果一个函数前面带上new来调用,那么将创建一个隐藏链接到该函数的prototype成员的新对象,同时this将会被绑定到那个新对象上。

不推荐使用这种方法。

var Quo=function(string)
{
this.status =string;
};
Quo.prototype.get_status
= function(){return this.status;};
var myQuo
= new Quo("Confused");
alert(myQuo.get_status());
//new could not be lost.

Apply调用模式 The Apply Invocation Pattern

通过apply/call方法调用函数,其中第一个参数为我们指定的this的值。

var statusObject = {status : 'A-OK'};
var status
= Quo.prototype.get_status.apply(statusObject);
//result is 'A-OK';the first param is "this" value.