//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_函数方法的更多相关文章

  1. 你真的会玩SQL吗?实用函数方法汇总

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  2. MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建

    前言 在操作数据库的时候经常会用到判断数据表.视图.函数/方法.存储过程是否存在,若存在,则需要删除后再重新创建.以下是MS SQL Server中的示例代码. 数据表(Table) 创建数据表的时候 ...

  3. 如何设计PHP业务模块(函数/方法)返回结果的结构?

    如题:如何设计业务模块返回结果的结构? 一个业务函数/方法执行后,对外输出数据的结构通常有以下几种: 1.返回数字,如 成功时返回 0,失败时返回 -1,有的还会用一个全局变量输出错误信息: < ...

  4. paip.函数方法回调机制跟java php python c++的实现

    paip.函数方法回调机制跟java php python c++的实现 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:// ...

  5. thinkphp模版调用函数方法

    原文:thinkphp模版调用函数方法 {变量|函数1|函数2|函数3=参数1,参数2,参数3,###} ###为第4个参数,代表变量替换为第4个参数 举例: {$username|substr=0, ...

  6. jQuery中常用的函数方法

    jQuery中常用的函数方法总结 Ajax处理 load(url,[data],[callback]) url (String) : 待装入 HTML 网页网址. data (Map) : (可选) ...

  7. JavaScript 函数(方法)的封装技巧要领及其重要性

    作为一枚程序猿,想必没有人不知道函数封装吧.在一个完整的项目开发中,我们会在JS代码中对一些常用(多个地方调用)的操作进行一个函数的封装,这样便于我们调试和重复调用,以致于能够在一定程度上减少代码的冗 ...

  8. Kotlin——基础的函数/方法详解

    对于Kotlin中的函数来说,和JavaScript或者Lua这些语言很像,它有着这些语言的特性.但是也与这些语言就着许多不同之处.或许你更了解Java语言,然而对于Java语言来说,它不是不是闭包这 ...

  9. PHP之取得当前时间函数方法

    PHP之取得当前时间函数方法 PHP之取得当前时间函数方法文章提供了php的几种获取当前时间的函数,date,time等,同时告诉我如何解决时区问题.php教程取得当前时间函数文章提供了php的几种获 ...

随机推荐

  1. Doracle.jdbc.J2EE13Compliant=true

    To make the Oracle driver behave in a Java EE-compliant manner, you must define the following JVM pr ...

  2. 041 SparkSql的回顾与复习

    在前面学完了SparkCore后,又学了SparkSQL,在继续加深学习之前,一定的复习还是很重要的.这里大体写一下,加深自己对SparlSQL的理解. 1.SparkSQL 首先是SaprkSQL与 ...

  3. Spark中groupByKey、reduceByKey与sortByKey

    groupByKey把相同的key的数据分组到一个集合序列当中: [("hello",1), ("world",1), ("hello",1 ...

  4. mybatis中if test 可以使用== != null '' and or 和括号()

    <if test="pd.flag==1 or ((pd.flag==2 or pd.flag==3) and (pd.sfyj==2 or pd.sfyj==3)) or pd.fl ...

  5. vdom,diff,key 算法的了解

    <ul id='list'> <li class='item'>Item1</li> <li class='item'>Item2 </li> ...

  6. 在 Windows 中为高级用户配置 IPv6 的指南

    在 Windows 中为高级用户配置 IPv6 的指南 适用于: Windows 10, version 1809Windows Server 2019, all versionsWindows Se ...

  7. P3258 [JLOI2014]松鼠的新家

    P3258 [JLOI2014]松鼠的新家倍增lca+树上差分,从叶子节点向根节点求前缀和,dfs求子树和即可,最后,把每次的起点和终点都. #include<iostream> #inc ...

  8. ServiceNow在中国还有没有模仿者?

    美国版的“ServiceNow”:https://www.servicenow.com 中国版的“ServiceHot” :http://www.itsmcn.com

  9. linux 学习笔记 APACHE安装总结

    #cd /usr/local #mkdir APACHE #tar zxvf /usr/etc/DEV/httpd-2.2.9.tar.gz #mv httpd-2.2.9/* . #rm -rf h ...

  10. asp.net core 依赖注入实现全过程粗略剖析(1)

    转载请注明出处: https://home.cnblogs.com/u/zhiyong-ITNote/ 常用扩展方法 注入依赖服务: new ServiceCollection().AddSingle ...