js函数和this用法实例分析


Posted in Javascript onMarch 13, 2020

本文实例讲述了js函数和this用法。分享给大家供大家参考,具体如下:

js的所有代码都是由funtion组成,funtion即函数的类型。

一.函数有两种写法

-----1.定义式

function test() { //定义一个函数
    console.log("function test called!!");
}

-----2.变量式

var test2 = function () {
    console.log("var test2 function called!!");
};

我们可以调用typeof()查看类型

var type = typeof(test2);
console.log(type); //function

二.函数也是对象

-----1.函数既然是对象,即就可以有属性和功能。函数也可以动态的增加属性,如下:

function test() {
    console.log("function test() called!!!");
}
test.user_name = "zhangsan";
console.log(test.user_name); //zhangsan

三.函数的实例化

    函数的实例化也有两种方式:

---------1.直接在函数名后面加上"()"         @@@@@常用这种方式

function test() {
    console.log("function test() called!!!");
}
test(); //function test() called!!!

---------2.使用关键字"new"进行实例化

function test() {
    console.log("function test() called!!!");
}
new test(); //function test() called!!!

四.this机制

//=====================this机制==================
function my_func(rhs, lhs) {
    console.log(this, rhs, lhs);
}
 
//显示不确定的this
//my_func(); //console显示
 
//--------------显示传递this-----------
//函数名.call(this,参数...) 显示传递this
my_func.call({ 0: "jade" }, 2, 3);
//------------------------------------
 
var tools = {
    my_func: my_func,
};
 
//表.key() --->this是表
tools.my_func(2, 3); //this是tools
// 相当于
tools.my_func.call(tools, 2, 3);
 
//强制绑定this,优先级最高
//函数.bind,不会改变原来函数对象的this,而是会产生一个新的临时的对象
//bind好了this
var new_func = my_func.bind({ name: "jade" });
new_func(3, 4);
 
tools.my_func = new_func;
tools.my_func(3, 4); //this是表{name:"jade"}
my_func(3, 4); //this不变,consloe
 
//====call与bind有什么区别呢?==
//bind最牛的地方是什么?是绑定this的时候,
//不是由调用者来决定的
 
new_func.call({ 0: 1 }, 3, 4); //this还是表{name:"jade"},不是{0:1}
 
//==================总结=============================
//在函数里面访问this,this是由调用的环境来决定的,不确定,一般不使用
//1.显示的传递this,函数.call(this对象,参数)
//2.隐式的传递this,表.key_函数(参数),this---》表
//3.bind优先级别是最高的

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
2010年最佳jQuery插件整理
Dec 06 Javascript
Javascript中的异步编程规范Promises/A详细介绍
Jun 06 Javascript
jquery实现手机号码选号的方法
Jul 31 Javascript
概述VUE2.0不可忽视的很多变化
Sep 25 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
Mar 31 Javascript
Node.JS利用PhantomJs抓取网页入门教程
May 19 Javascript
jQuery Validate表单验证插件实现代码
Jun 08 jQuery
Kindeditor单独调用单图上传增加预览功能的实例
Jul 31 Javascript
apicloud拉起小程序并传递参数的方法示例
Nov 21 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
Jun 11 Javascript
Vue 实现前端权限控制的示例代码
Jul 09 Javascript
vue中使用echarts的示例
Jan 03 Vue.js
js对象简介与基本用法示例
Mar 13 #Javascript
JS自定义滚动条效果
Mar 13 #Javascript
js Math数学简单使用操作示例
Mar 13 #Javascript
Vue实现仿iPhone悬浮球的示例代码
Mar 13 #Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
Mar 13 #Javascript
vue动态渲染svg、添加点击事件的实现
Mar 13 #Javascript
创建nuxt.js项目流程图解
Mar 13 #Javascript
You might like
PHP json格式和js json格式 js跨域调用实现代码
2012/09/08 PHP
PHP 芝麻信用接入的注意事项
2016/12/01 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
php基于 swoole 实现的异步处理任务功能示例
2019/08/13 PHP
不一样的文字闪烁 轮番闪烁
2009/11/11 Javascript
jquery的ajax()函数传值中文乱码解决方法介绍
2012/11/08 Javascript
Javascript基础 函数“重载” 详细介绍
2013/10/25 Javascript
nodejs中的fiber(纤程)库详解
2015/03/24 NodeJs
JQuery中Bind()事件用法分析
2015/05/05 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
React教程之封装一个Portal可复用组件的方法
2018/01/02 Javascript
js经验分享 JavaScript反调试技巧
2018/03/10 Javascript
最简单的JS实现json转csv的方法
2019/01/10 Javascript
在Python中使用Neo4j数据库的教程
2015/04/16 Python
Python多线程和队列操作实例
2015/06/21 Python
Scrapy的简单使用教程
2017/10/24 Python
深入浅析python with语句简介
2018/04/11 Python
Python格式化日期时间操作示例
2018/06/28 Python
python实现转盘效果 python实现轮盘抽奖游戏
2019/01/22 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
2020/07/02 Python
HTML5实现自带进度条和滑块滑杆效果
2018/04/17 HTML / CSS
彼得罗夫美国官网:Peter Thomas Roth美国(青瓜面膜)
2017/11/05 全球购物
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
C语言编程练习
2012/04/02 面试题
掌上明珠Java程序员面试总结
2016/02/23 面试题
医学生职业规划范文
2014/01/05 职场文书
寄语十八大感言
2014/02/07 职场文书
幼师求职自荐信
2014/05/31 职场文书
党支部2014年度工作总结
2014/12/04 职场文书
2015年乡镇统计工作总结
2015/04/22 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
Python anaconda安装库命令详解
2021/10/16 Python