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 相关文章推荐
JS 强制设为首页的代码
Jan 31 Javascript
用Javascript实现Windows任务管理器的代码
Mar 27 Javascript
原生javaScript做得动态表格(注释写的很清楚)
Dec 29 Javascript
jQuery操作属性和样式详解
Apr 13 Javascript
快速解决vue-cli在ie9+中无效的问题
Sep 04 Javascript
JavaScript基于数组实现的栈与队列操作示例
Dec 22 Javascript
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
Jun 24 Javascript
vue 地区选择器v-distpicker的常用功能
Jul 23 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
Sep 27 Javascript
vue点击标签切换选中及互相排斥操作
Jul 17 Javascript
JavaScript实现表单验证功能
Dec 09 Javascript
一起深入理解js中的事件对象
Feb 06 Javascript
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 autoload与spl_autoload自动加载机制的深入理解
2013/06/05 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
IE无法设置短域名下Cookie
2010/09/23 Javascript
使用闭包对setTimeout进行简单封装避免出错
2013/07/10 Javascript
使用jQuery获得内容以及内容的属性
2015/02/26 Javascript
理解javascript函数式编程中的闭包(closure)
2016/03/08 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
微信小程序 增、删、改、查操作实例详解
2017/01/13 Javascript
Bootstrap笔记之缩略图、警告框实例详解
2017/03/09 Javascript
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
vue自定义指令实现方法详解
2019/02/11 Javascript
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
jQuery+ThinkPHP实现图片上传
2020/07/23 jQuery
JavaScript实现轮播图效果
2020/10/30 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
[48:27]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
python编程开发之类型转换convert实例分析
2015/11/13 Python
Python爬取三国演义的实现方法
2016/09/12 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
python多行字符串拼接使用小括号的方法
2020/03/19 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
2019/10/17 Python
python中怎么表示空值
2020/06/19 Python
Scrapy 配置动态代理IP的实现
2020/09/28 Python
HTML5+CSS3网页加载进度条的实现,下载进度条的代码实例
2016/12/30 HTML / CSS
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
.NET方向面试题
2014/11/20 面试题
行政人事经理职位说明书
2014/03/05 职场文书
活动总结格式范文
2014/04/26 职场文书
项目合作意向书模板
2014/07/29 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
降价通知函
2015/04/23 职场文书
小学数学教学随笔
2015/08/14 职场文书
解析Redis Cluster原理
2021/06/21 Redis
使用Nginx的访问日志统计PV与UV
2022/05/06 Servers