ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaScript 中有哪些不同的函数调用模式?

2019-03-14 17:54:01  阅读:192  来源: 互联网

标签:function console log 哪些 JavaScript 函数调用 say var name


1.函数调用

2.方法调用

3.构造器调用

4.上下文形态

第一种函数调用:

使用函数调用模式调用函数时,非严格模式下,this被绑定到全局对象;在严格模式下,this是undefined。
function A(){
    console.log(this);
}
A();//window
function A(){
    'use strict';
    console.log(this); //undefined
}
A();

第二种:方法调用:

只会执行一段代码,同时方法中的 this 是方法的所有者,即当前的实例对象;返回值由 return 语句决定。

var obj = {
    name: '5se7en',
    say: function(){
        console.log(this.name);
    }
}
obj.say();//方法调用模式  5se7en

function A(){
    console.log(this);
}
var obj2 = {
    say: A  //将A函数赋值给obj2的say属性
}
obj2.say();//方法调用模式。this指向obj2

var obj3 = {
    name: '57',
    say: function)({
        console.log(this.name)
    })
}
var obj4 = {
    name: '伍柒',
    say: obj3.say //将obj3.say函数赋值给obj4的say
}
obj4.say();//方法调用模式:this——>obj4

第三种:构造器函数调用:

会用来创建一个对象,还是执行一段代码,this 表示当前对象

//没有手动return添加返回值,默认返回 this
function Person(){
    this.name = '5se7en';
    this.age = 18;
    console.log(this);
}
var p1=new Person();
console.log(p1.name)  //5se7en

//返回了一个基本数据类型(number / boolean / string / null / undefined),最终返回 this
function P2(){
    this.age=18;
    return "abc";
}
var p2=new P2();
console.log(p2.age)  //18

// 返回了一个复杂数据类型(对象),最终返回该对象
function P3(){
    this.age=10;
    return {};
}
var p3=new P3();
console.log(p3.age); //undefined

// 返回了一个复杂数据类型(对象),最终返回该对象
function P4(){
    this.age=10;
    return [1,3,5];
}
var p4=new P4();
console.log(p4.age);//undefined

第四种: 上下文形态(apply, call)

//如果有参数的情况
var obj1 = {};
function sum(x,y){
    return x+y;
}
console.log(sum.call(obj1,1,2));//3
console.log(sum.apply(obj1,[1,2]));//3

标签:function,console,log,哪些,JavaScript,函数调用,say,var,name
来源: https://blog.csdn.net/qq_33505829/article/details/88557300

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有