• 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
  • 相关阅读:
    I
    D
    K
    G
    J
    Doom HDU
    Mountaineers Gym
    华南理工大学“三七互娱杯”程序设计竞赛(重现赛)( HRY and array 高精度除法模板)
    Corn Fields POJ
    linux如何安装缺失依赖
  • 原文地址:https://www.cnblogs.com/LandMine/p/5373508.html
Copyright © 2020-2023  润新知