ES6_函数方法
//2017/7/15
//Javascript 中的方法:在一个对象中绑定函数,称为这个对象的方法。
/**/
var boy={
name:'xiaoming',
birth:2007,
age:function(){
var y=new Date().getFullYear();
return y-this.birth;//注意这里的this,在这个方法内部,this始终指向当前对象,也就是boy这个对象,this.birth可以取到boy对象里的birth的值。
}
}; console.log(boy.age);//打印出整个函数
console.log(boy.age());// /**/
function getAge(){
var y=new Date().getFullYear();
return y-this.birth;
} var boy={
name:'xiaoming',
birth:2007,
age:getAge
} console.log(boy.age());//
console.log(getAge());//NaN。注意:这里单独调用getAge()函数,该函数的this指向全局对象,也就是window。 /**/
var fn=boy.age;//不能先拿到boy的age函数,要保证this指向正确,必须用obj.xxx()的形式调用。
console.log(fn());//NaN。 /**/
//this的指向是个大问题,ECMA决定,在strict模式下让函数的this指向undefined,因此,在strict模式下,我们会得到一个错误,这只是让错误暴露出来,并没有解决this应该指向的正确位置。 "use strict";
var xiaoming={
name:"xiaoming",
birth:2007,
age:function(){
var y=new Date().getFullYear();
return y-this.birth;
}
}; var fn=xiaoming.age;
fn();//Uncaught TypeError: Cannot read property 'birth' of undefined /**/
"use strict";
var xiaoming={
name:"xiaoming",
birth:2007,
age:function(){
function getAge(){
var y=new Date().getFullYear();
return y-this.birth;
}
return getAge();
}
};
xiaoming.age();//es6.html:426 Uncaught TypeError: Cannot read property 'birth' of undefined
console.log(xiaoming.age());//在非strict模式下:NaN //这是因为this指针只在age方法的函数内指向xiaoming,在函数内部定义的函数又指向undefined(在非strict模式下,它重新指向全局对象window!)。 /**/
//修复方法:用一个that变量首先捕获this。 "use strict";
var xiaoming={
name:"xiaoming",
birth:2007,
age:function(){
var that=this;//一开始就捕获this,可以放心地在其他方法内部定义其他函数,而不是吧所有的语句都写在同一个方法中。
function getAge(){
var y=new Date().getFullYear();
return y-that.birth;
}
return getAge();
}
};
// xiaoming.age();
console.log(xiaoming.age());// /**/
//用apply修复getAge()调用
//要指定函数的this指向哪个对象,可以用函数本身的apply方法,该方法接收两个参数,一个是要绑定的this变量,第二个参数是Array,表示函数本身的参数。
// function getAge(){
var y=new Date().getFullYear();
return y-this.birth;
} var xiaoming={
name:"xiaoming",
birth:2007,
age:getAge
} console.log(xiaoming.age());//
console.log(getAge.apply(xiaoming,[]));// /**/ //apply()方法与call()方法
//apply()方法是把参数打包成Array再传入。
//call()方法把参数按顺序传入。 //eg:条用Math.max(3,4,5)
Math.max.apply(null,[3,4,5]);//
Math.max.call(null,3,4,5);//
//对于普通函数调用,我们通常把this绑定为null。 /**/ //注意:利用apply(),可以动态改变函数的行为。以下函数的作用是统计parseInt函数被调用了几次。
var count=0;
var oldParseInt=parseInt; window.parseInt=function(){
count+=1;
return oldParseInt.apply(null,arguments)
}; parseInt('10');
parseInt('20');
console.log(count);//
ES6_函数方法的更多相关文章
- 你真的会玩SQL吗?实用函数方法汇总
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建
前言 在操作数据库的时候经常会用到判断数据表.视图.函数/方法.存储过程是否存在,若存在,则需要删除后再重新创建.以下是MS SQL Server中的示例代码. 数据表(Table) 创建数据表的时候 ...
- 如何设计PHP业务模块(函数/方法)返回结果的结构?
如题:如何设计业务模块返回结果的结构? 一个业务函数/方法执行后,对外输出数据的结构通常有以下几种: 1.返回数字,如 成功时返回 0,失败时返回 -1,有的还会用一个全局变量输出错误信息: < ...
- paip.函数方法回调机制跟java php python c++的实现
paip.函数方法回调机制跟java php python c++的实现 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:// ...
- thinkphp模版调用函数方法
原文:thinkphp模版调用函数方法 {变量|函数1|函数2|函数3=参数1,参数2,参数3,###} ###为第4个参数,代表变量替换为第4个参数 举例: {$username|substr=0, ...
- jQuery中常用的函数方法
jQuery中常用的函数方法总结 Ajax处理 load(url,[data],[callback]) url (String) : 待装入 HTML 网页网址. data (Map) : (可选) ...
- JavaScript 函数(方法)的封装技巧要领及其重要性
作为一枚程序猿,想必没有人不知道函数封装吧.在一个完整的项目开发中,我们会在JS代码中对一些常用(多个地方调用)的操作进行一个函数的封装,这样便于我们调试和重复调用,以致于能够在一定程度上减少代码的冗 ...
- Kotlin——基础的函数/方法详解
对于Kotlin中的函数来说,和JavaScript或者Lua这些语言很像,它有着这些语言的特性.但是也与这些语言就着许多不同之处.或许你更了解Java语言,然而对于Java语言来说,它不是不是闭包这 ...
- PHP之取得当前时间函数方法
PHP之取得当前时间函数方法 PHP之取得当前时间函数方法文章提供了php的几种获取当前时间的函数,date,time等,同时告诉我如何解决时区问题.php教程取得当前时间函数文章提供了php的几种获 ...
随机推荐
- nginx error.log 提示 [error] 887#887: *58 FastCGI sent in stderr: "PHP message: PHP Warning: mysql_connect(): Headers and client library minor version mismatch. Headers:50556 Library:50637
0. 1.问题 1.1现象: nginx error.log 提示 [error] 887#887: *58 FastCGI sent in stderr: "PHP message: PH ...
- Principles and strategies for mathematics study
Make mathematics study a habit with dogged perseverance Don't build mansion on top of loose sand. Co ...
- ASP.NET machineKey的作用和使用方法
ASP.NET machineKey的作用 如果你的Asp.Net程序执行时碰到这种错误:“验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 <machineKey> ...
- eclipse发布web
elipse集成tomcat 在实际开发中通常在eclipse中集成tomcat,这样在开发中更方便一些.打开eclipse,选择界面下方的servers选项,点击no servers are ava ...
- Python学习(二十八)—— Django模板系统
转载自http://www.cnblogs.com/liwenzhou/p/7931828.html Django模板系统 官方文档 一.常用语法 只需要记两种特殊符号: {{ }}和 {% %} ...
- BZOJ1433 [ZJOI2009]假期的宿舍 二分图匹配 匈牙利算法
原文链接http://www.cnblogs.com/zhouzhendong/p/8372785.html 题目传送门 - BZOJ1433 题解 我们理一理题目. 在校的学生,有自己的床,还可以睡 ...
- Python3爬虫知识点总结
1.requests获取响应头的方法 eg:获取响应头信息 import requests res = request.head(url).headers print(res)
- Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第三集之磁盘分区】
磁盘分区的概念对接下来的自定义安装Linux具有重要作用.(可以直接先看第四集之Linux安装就能知道分区的重要性) ----------------------------------------- ...
- Remmarguts' Date POJ - 2449 (A*搜索|k短路)
"Good man never makes girls wait or breaks an appointment!" said the mandarin duck father. ...
- Java Lambda基础——Function, Consumer, Predicate, Supplier, 及FunctionalInterface接口
这几个接口经常与Lambda结合使用,网上当然也有很多介绍,不过有些过于繁琐,有些又偏简单,秉着实用主义精神,今天这里折中一下,把介绍的内容分为两部分,第一部分相当于TLDR,总结几个"口诀 ...