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的几种获 ...
随机推荐
- springboot整合Quartz实现动态配置定时任务
前言 在我们日常的开发中,很多时候,定时任务都不是写死的,而是写到数据库中,从而实现定时任务的动态配置,下面就通过一个简单的示例,来实现这个功能. 一.新建一个springboot工程,并添加依赖 & ...
- 基于nopcommerce b2c开源项目的精简版开发框架Nop.Framework
http://www.17ky.net/soft/70612.html?v=1#0-sqq-1-39009-9737f6f9e09dfaf5d3fd14d775bfee85 项目详细介绍 该开源项目是 ...
- Python学习(五) —— 文件操作
一.文件操作 1.文件操作:数据持久化的一种 步骤:找到文件,打开文件,操作:读.写.追写,关闭文件 打开文件:f = open(文件路径,操作模式,编码方式),f:文件句柄.文件 ...
- HTML5拖放牛刀小试
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 关闭PHP的opcache缓存
1.使用phpinfo();查看配置信息 2.搜索Additional .ini files parsed 3.查看opcache安装目录 4.打开文件将 opcache.enable=1 改成 ...
- 2018牛客网暑假ACM多校训练赛(第三场)I Expected Size of Random Convex Hull 计算几何,凸包,其他
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-I.html 题目传送门 - 2018牛客多校赛第三场 I ...
- Django1.11.7配置静态文件
Django配置静态文件分为三步 1.建文件夹 2.设置setting 3.页面引用 1.文件目录结构 在APP下新建static文件夹,将js和css文件放入文件夹 2.配置settings.py ...
- zip文件解压工具类
java解压zip文件 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io. ...
- unity打成aar上传到maven库的工具
需求: 把unity打成aar并上传到maven库 其实就是把前两个博客整合了一下 unity打aar包工具 aar上传maven库工具 这里先说eclipse版的 package com.jinke ...
- python实现杨辉三角
刚刚学python,原来用c++,Java很轻松实现的杨辉三角,现在用python实现,代码是少了,理解起来却不容易啊. 这里主要用到的Python的生成器. 我们都知道Python有列表解析功能,根 ...