函数

一:函数调用

构成函数主体的JavaScript代码在定义之时并不会执行,只有调用该函数时,他们才会执行。有四种方法来调用JavaScript函数:

a:作为函数

b:作为方法

c:作为构造函数

d:通过他们的call()和apply()方法间接调用。

二:作为函数调用

function printprops(o){
    for(var p in o){
        console.log(p+": "+o[p]+"
")
    }
}
printprops({x:1});

三:作为方法调用

当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时,this本绑定到该对象。如果调用表达式包含一个提取属性的动作(即包含一个。点表达式或【】下标表达式),那么它就是被当做一个方法来调用。

var calculator = {
    operand1:1,
    operand2:2,
    add:function () {
        this.result = this.operand1+this.operand2
    }
};
calculator.add();/*这个方法调用来计算1+2的值*/
alert(calculator.result);/*3*/

四:this在函数中的指向

this是一个关键字,不是变量,也不是属性名。JavaScript的语法不允许给this赋值。和变量不同,关键字this没有作用域的限制,嵌套的函数不会从调用它的函数中继承this。如果嵌套哈数作为方法调用,其this的值就是指向调用它的对象。如果嵌套函数作为方法调用,其this的值不是全局对象就是undefined。如果你想访问这个外部函数的this值,需要将this的值保存在一个变量里,这个变量和内部函数都在同一个作用域内。通常使用self来保存this。

var o ={                                /*对象o*/
    m:function () {                     /*对象中的方法m*/
        var self = this;                /*将this的值保存在一个变量中*/
        console.log(this === self);     /*输出true,this就是这个对象o*/
        f();                            /*调用辅助函数*/
        function f() {                  /*定义一个嵌套函数*/
            console.log(this === o);    /*false:this的值是全局对象*/
            console.log(self === o);    /*true:self指外部函数的this值*/
        }
    }
};
o.m();

五:构造函数调用

如果函数或者方法调用之前带有关键字new,那么背地里将会创建一个连接到该函数的prototype成员的新对象,同时会将this绑定到那个对象上。

/*创建一个名为Quo的构造器函数,它构造一个带有status属性的对象。*/
var Quo = function (string) {
    this.status = string;
};
/*给Quo的所有实例提供一个get_status的公共方法。*/
Quo.prototype.get_status = function () {
    return  this.status;
};
/*构造一个Quo实例*/
var myQuo = new Quo("confused");
/*打印*/
document.write(myQuo.get_status());
原文地址:https://www.cnblogs.com/QianBoy/p/7632595.html