我是靠谱客的博主 活力水壶,最近开发中收集的这篇文章主要介绍js高级——函数的四种调用模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.函数模式:this指向的是window全局对象
function test (){

}
test () ;


2.方法模式:this指向的是调用这个方法的对象
var obj = {
    test : function (){

    }
} ;
obj. test () ;


3.构造函数模式:this指向的是使用new创建出来的对象
function Person (){

}
var obj = new Person () ;
(1)构造函数调用模式的特征
    ·构造函数的首字母要大写
    ·一般情况下和new关键字一起使用
    ·构造函数中的this指向的是new关键字创建出来的对象
    ·默认返回new创建出来的这个对象,若是值类型的数据则没有影响;若是对象类型则返回这个对象,不会返回原来创建出来的对象
(2)工厂模式的构造函数
    ·简单工厂模式的构造函数创建出来的对象跟该构造函数无关
    ·简单工厂模式的构造函数实际的调用模式是函数模式
function Person (name , age){
    var o = {
        name :name ,
        age :age ,
        sayHello : function (){

        }
    } ;
    return o ;
}
var p = new Person ( "张三" , 18 ) ;
console . log (p) ;



(3)寄生式构造函数
function Person (name , age){
    var o = {
        name :name ,
        age :age ,
        sayHello : function (){ }
    } ;
    return o ;
    }
var p = new Person () ;



4.上下文模式:其实就是一个执行环境,这里的执行环境指的就是this(如果是在全局环境下这个this指的就是window,执行环境就是window;如果是在一个对象的调用下去执行,this指的就是这个对象)
(1)在上下文调用模式中可以修改this的值(也就是可以修改函数的调用方式)
    ·apply:函数.apply(对象,[函数需要的参数列表,是一个数组]这里的[]表示的是可有可无的意思),用于函数的形参个数确定/不确定的情况
    ·call :函数.call(对象,[arg1],[arg1],[arg3]...[argn]这里的[]表示的也是可有可无的意思,不是数组),用于确定了函数的形参个数确定的情况
注意:
    ·apply和call的相同点
        ·第一个参数都是要把this修改成对象
        ·第一个参数传递null的时候都表示函数调用模式(也就是将this指向window)
    ·apply和call的不同点:当函数需要参数的时候,apply是用数组进行参数的传递,call是用单个的参数传递
(2)apply补充
var obj = { //伪数组
    0 : "abc" ,
    1 : "def" ,
    2 : "hig" ,
    length : 3
} ;

var arr = []. concat .apply([] , obj) ; //把obj和[]空数组拼起来然后返回给arr
console . log (arr) ;

function test (){
    console . log ( this ) ;
}
test . apply ( 1 ) ;
test . apply ( "abc" ) ;
test . apply ( true ) ;
test . apply ( window ) ;
//当使用call、apply传入的第一个参数为值类型时会将值类型转换成对应的对象(也就是对应的引用类型),然后赋值给this
//的那个传入的第一个参数为null/undefined的时候会把this赋值为window


//借用构造函数实现继承
function Person (){
    this . name = "张三" ;
    this . age = 18 ;
}

function Student (){
    Person . apply ( this ) ;
}

var stu = new Student () ;
console . log (stu) ;                       //打印出来的就是张三、18


最后

以上就是活力水壶为你收集整理的js高级——函数的四种调用模式的全部内容,希望文章能够帮你解决js高级——函数的四种调用模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部