javascript之面向对象学习笔记03

实例成员静态成员

实例成员:由构造函数创建的对象的成员。

静态成员:构造函数的成员

 

一般在使用的时候, 将通用的方法由静态成员提供, 实例成员如果要实现该功能, 调用静态成员来实现

 

 

构造函数的部分属性

1name

语法:函数名.name

作用:返回构造函数名字

function f (){}

console.log(f.name) // f

 

 

2、length

语法:函数名.length

作用:返回构造函数参数列表形参的个数,arguments.length获得调用方法时实参的个数

 

function f (a,b,c){

console.log(arguments.length)

}

console.log(f.length) // 3

f(1,2); //2

 

3、caller

语法:函数名.caller

作用:返回调用该函数的函数,已被废除

 

function foo () {

console.log( foo.caller );

}

foo(); //无函数在调用foo,打印null

function f () {

foo();

}

f(); //在函数f内调用foo,打印函数f

 

递归

所谓递归就是自己调用自己。

 

function f(){

f();

}

f();  //死递归导致报错

 

arguments.callee 指向当前函数

function f(){

arguments.callee();

}

f();  //死递归导致报错

 

 

闭包

在函数内部允许访问外部的变量, 但是反之不允许

 

function fn (){

    var a = 0;

    return function (){

        return a;

    };

}

 

此时便可访问到fn函数内部的变量

 

获得闭包内多个变量,可以返回对象实现

function fn (){

var a = 0;

var b = 1;

return {

        getA : function(){ return a; }

        getB : function(){ return b; }
 
    };

}

var f = fn();

console.log(f.getA());//0

console.log(f.getB());//1

 

 

沙箱模式

js , 只有函数可以限定变量的作用域,自然只有函数可以实现隔离。

 

(function(){

    //.......

})()

 

 

在该自调用函数中,所有定义的变量只在函数内生效,避免污染全局变量。如果需要使用沙箱内的变量可移动过挂在window的方式提供访问接口。

 

(function(){

    var a = 10;

    var b = 20;

    window.a = a;

})()

console.log(a); //10

console.log(b); //报错

 

 

函数的调用模式

1、函数模式

直接调用方法,属于函数模式,this指向window对象

function fn(){

    console.log(this); 

}

fn();//Window

 

 

2、方法模式

函数属于某个对象的属性,使用对象.函数调用属于方法模式,this指向调用的对象

var o = {

    fn : function(){

        console.log(this);

    }

};

o.fn(); //o

 

 

3、构造器模式

使用new来调用函数,this指向实例化出来的对象

 

function Fn(){

    this.n = 1;

}

var f = new Fn();

console.log(f.n); //1

 

 

需要注意的是使用new来调用函数时return返回基本类型时忽略,返回对象时函数的返回值是return的对象。

 

function Fn1(){

    this.n = 1;

    return 2;//返回基本类型

}

var f1 = new Fn1();

console.log(f1.n); //1  f1无影响

 
function Fn2(){

    this.n = 1;

    return {n:2};//返回对象

}

var f2 = new Fn2();

console.log(f2.n); //2  f2为返回的对象

 

 

4、上下文模式

使用函数.apply或者函数.cell方法调用,apply方法和call方法实现的功能相同,仅仅参数不同。apply方法第一个参数为上下文对象,第二个参数若有则为数组,内容为方法的参数列表。call第一个参数和apply相同,之后的参数为函数的参数列表

function fn(a,b){

    console.log(this+"-----"+a+"------"+b);

}

var obj = {n:1};

var arr = [2];

fn.apply(obj,[1,2]);  //[object Object]-----1------2

fn.call(arr,1,2);     //2-----1------2

 

posted @ 2016-04-10 10:28  地雷  阅读(140)  评论(0编辑  收藏  举报