>>分享Web前端开发技术,并对孙卫琴的《精通Vue.js:Web前端开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 26066 个阅读者 刷新本主题
 * 贴子主题:  JavaScript 函数调用方式 回复文章 点赞(0)  收藏  
作者:sunshine    发表时间:2019-08-16 18:42:55     消息  查看  搜索  好友  邮件  复制  引用

  

JavaScript  函数调用

        JavaScript 函数有 4 种调用方式。

        每种方式的不同在于 this 的初始化。              

   this 关键字

         一般而言,在Javascript中,this指向函数执行时的当前对象。

                            
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小 注意 this 是保留关键字,你不能修改 this 的值。
        

调用 JavaScript 函数

     在之前的章节中我们已经学会了如何创建函数。

     函数中的代码在函数被调用后执行。        

作为一个函数调用

范例

function   myFunction ( a ,  b )   {
     return   a  *  b ;
}
myFunction ( 10 ,  2 ) ;            //  myFunction(10, 2) 返回 20

                    以上函数不属于任何对象。但是在 JavaScript 中它始终是默认的全局对象。

         在 HTML 中默认的全局对象是 HTML 页面本身,所以函数是属于 HTML 页面。

         在浏览器中的页面对象是浏览器窗口(window 对象)。以上函数会自动变为 window 对象的函数。

         myFunction() 和 window.myFunction() 是一样的:            

范例

function   myFunction ( a ,  b )   {
     return   a  *  b ;
}
window . myFunction ( 10 ,  2 ) ;     //  window.myFunction(10, 2) 返回 20

          
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小 这是调用 JavaScript 函数常用的方法, 但不是良好的编程习惯

    全局变量,方法或函数容易造成命名冲突的bug。
        

全局对象

         当函数没有被自身的对象调用时 this 的值就会变成全局对象。

         在 web 浏览器中全局对象是浏览器窗口(window 对象)。

         该范例返回 this 的值是 window 对象:            

范例

function   myFunction ( )   {
     return   this ;
}
myFunction ( ) ;                 //  返回 window 对象

                                                    
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小 函数作为全局对象调用,会使 this 的值成为全局对象。
使用 window 对象作为一个变量容易造成程序崩溃。
        

函数作为方法调用

     在 JavaScript 中你可以将函数定义为对象的方法。

     以下范例创建了一个对象 ( myObject), 对象有两个属性 ( firstName lastName), 及一个方法 ( fullName):            

范例

   var   myObject  =  {
     firstName : " John " ,
     lastName :  " Doe " ,
     fullName :  function   ( )   {
         return   this . firstName  +  "   "  +  this . lastName ;
     }
}
myObject . fullName ( ) ;          //  返回 "John Doe"

           fullName 方法是一个函数。函数属于对象。 myObject 是函数的所有者。

           this对象,拥有 JavaScript 代码。范例中 this 的值为 myObject 对象。

         测试以下!修改 fullName 方法并返回 this 值:            

范例

   var   myObject  =  {
     firstName : " John " ,
     lastName :  " Doe " ,
     fullName :  function   ( )   {
         return   this ;
     }
}
myObject . fullName ( ) ;           //  返回 [object Object] (所有者对象)

                                        
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小 函数作为对象方法调用,会使得 this 的值成为对象本身。
        

使用构造函数调用函数

     如果函数调用前使用了 new 关键字, 则是调用了构造函数。

     这看起来就像创建了新的函数,但实际上 JavaScript 函数是重新创建的对象:            

范例

//  构造函数:  
function   myFunction ( arg1 ,  arg2 )   {
     this . firstName  =  arg1 ;
     this . lastName   =  arg2 ;
}

//  This    creates a new object  
var   x  =  new   myFunction ( " John " , " Doe " ) ;
x . firstName ;                              //  返回 "John"

       构造函数的调用会创建一个新的对象。新对象会继承构造函数的属性和方法。

                            
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小 构造函数中 this 关键字没有任何的值。

     this 的值在函数调用范例化对象(new object)时创建。
        

作为函数方法调用函数

     在 JavaScript 中, 函数是对象。JavaScript 函数有它的属性和方法。

         call() apply() 是预定义的函数方法。

两个方法可用于调用函数,两个方法的第一个参数必须是对象本身。              

范例

function   myFunction ( a ,  b )   {
     return   a  *  b ;
}
myObject  =  myFunction . call ( myObject ,  10 ,  2 ) ;      //  返回 20

范例

function   myFunction ( a ,  b )   {
     return   a  *  b ;
}
myArray  =  [ 10 ,  2 ] ;
myObject  =  myFunction . apply ( myObject ,  myArray ) ;   //  返回 20

     两个方法都使用了对象本身作为第一个参数。

   两者的区别在于第二个参数:

   apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。

   在 JavaScript 严格模式(strict mode)下, 在调用函数时第一个参数会成为 this 的值, 即使该参数不是一个对象。

   在 JavaScript 非严格模式(non-strict mode)下, 如果第一个参数的值是 null 或 undefined, 它将使用全局对象替代。

                                    
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小 通过 call() 或 apply() 方法你可以设置 this 的值, 且作为已存在对象的新方法调用。




程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-02-17 12:37:24 重新编辑]
  Java面向对象编程-->面向对象开发方法概述之UML语言(下)
  JavaWeb开发-->Web运作原理(Ⅰ)
  JSP与Hibernate开发-->映射组成关系
  Java网络编程-->对象的序列化与反序列化
  精通Spring-->虚拟DOM和render()函数
  Vue3开发-->绑定CSS样式
  10个 Web 开发人员的常用的 Chrome 扩展程序
  JavaScript Promise对象的用法
  javaScript中==和===的区别详解
  Vue自定义数据验证指令
  基于vue和springmvc前后端分离,json类接口调用介绍
  vue实现Word或Excel文档导出的功能,转换文件名乱码或者json...
  Vue自定义指令的用法
  Vue路由开启keep-alive时的注意点
  jQuery 删除元素
  JavaScript的Window 对象
  CSS3 文本效果
  CSS 表单的用法
  jQuery Mobile 方向改变事件
  应该掌握的几个HTML标记语言(个人总结)
  一文读懂前端技术演进:盘点Web前端20年的技术变迁史
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。