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的几种获 ...
随机推荐
- 初学python 遇到的坑
这最近人工智能比较火,看了一下大多都是python的代码,最近看看python 的代码,一出来就遇到了坑,空格的问题先不说了直接上代码吧 # coding = utf-8 import urllib. ...
- Android Studio运行项目报错:Error:null value in entry: annotationProcessorOutputFolder=null的解决方案
一般是在Android studio异常退出(比如强制关机)后,重新打开后运行项目出现该问题. 解决方案 删除项目根目录的.gradle文件夹,然后Clean Project —— Rebulid ...
- elemnt UI点击事件失效,得到tab的序号
在用element 的tab的时候发现 事件绑定没有作用 看了官网才知到内置有回掉函数 绑定的地方是 <el-tabs></el-tabs> <template> ...
- 【前端基础系列】理解bind方法使用与实现
方法描述 bind()方法创建一个新函数,当被调用时,将其this关键字设置为提供的值. 语法说明 fn.bind(thisArg,arg1,arg2,..) 参数说明 thisArg:当绑定函数被调 ...
- 基于nopcommerce b2c开源项目的精简版开发框架Nop.Framework
http://www.17ky.net/soft/70612.html?v=1#0-sqq-1-39009-9737f6f9e09dfaf5d3fd14d775bfee85 项目详细介绍 该开源项目是 ...
- 无法删除另一个分区的windows文件夹
转自:http://zhidao.baidu.com/link?url=77mJiLzVTdr9LzW4R6UYHZ8OJovvXsH8HQb0hyUKL4RKv2J3bItFJgJx-xqAEGOj ...
- Python select解析
一.首先列一下,sellect.poll.epoll三者的区别 1.select a.select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监控多个文件描述符的数组,当 ...
- python--闭包、装饰器
1.闭包 ①.python中一切皆对象,函数中嵌套函数肯定也是合理的,这种函数也叫作内嵌函数(内部函数) ②.内嵌函数只能被外部函数调用,被外部函数以外的区域被调用,就会出错!!! ③.若内部函数中引 ...
- 003 python中的内置函数
一:如何查看内置函数 1.命令 dir(__builtins__) 2.效果 二:具体的用法 1.input 简单使用: 2.type 返回变量的类型 3.str 将类型转变为字符串 4.isinst ...
- P1168 中位数
P1168 中位数树状数组+二分答案.树状数组就是起一个高效查询比二分出来的数小的有几个. #include<iostream> #include<cstdio> #inclu ...