再次理解javascript的apply
普通函数执行的时候,this指向函数执行的上下文
莫非它们像链条一样连在一起?
![](\Users\TONG20~1\AppData\Local\Temp\V%C__UGQ`7CN6C)SZEZ)$}G.gif)
嗯嗯
刚想说这个
太灵活了,不知道是什么,想要干啥
![](https://images2015.cnblogs.com/blog/404972/201706/404972-20170608214621684-849154718.jpg)
![](\QQFile\386166552\Image\Group\5VQ$TBBD0YW~8M3DLIGVUVX.png)
call 和 apply就是绑定一个函数执行的 this指向
觉apply()和代码上下文有很大关系
这意思是修改父类吗?
修改this指向是为了啥?
有何图谋?
我想下场景哈
我个人认为。。。apply 和 call 之前的作用其实主要的作用就是为了实现原型链的继承
apply前面的这个对象就会变成a的属性?
而是本次执行的 函数执行的上下文变成了a
你的意思是只是在a中执行,但是和a没关系?
也就是说
XXX在执行的时候 你在里边调用 this 其实就是 a
![](https://images2015.cnblogs.com/blog/404972/201706/404972-20170608215036434-599773047.jpg)
是的呢。
我擦,js好底层啊
c#绝对做不到
用个其他变量也行啊
function Person (name, age) {
this.name = name
this.age = age
}
Person.prototype.show = function () {
console.log('name:', name, 'age', age)
}
// 这时,我又需要一个新的类,在name 和 age之外,我还需要一个 sex属性,但是,Person类是可以复用的,没有必要重新写一遍那些代码,所以我们需要用到Person来执行一些属性的构建操作
function Man (name, age) {
Person.apply(this, [name, age])
}
var people = new Man('Niko', 18)
但是这个继承方式。。并没有办法拿到 你apply的那个函数的prototype
![](https://images2015.cnblogs.com/blog/404972/201706/404972-20170608215249200-1715879112.jpg)
![](https://images2015.cnblogs.com/blog/404972/201706/404972-20170608215328122-736887141.png)
就是这一句,会执行Person的代码,但是此时的this ,其实是Man实例化的上下文
![](\Users\TONG20~1\AppData\Local\Temp\LCLFP8HNRUT0200)[E(TP]2.gif)
![](https://images2015.cnblogs.com/blog/404972/201706/404972-20170608215410247-1249680561.jpg)
![](\QQFile\386166552\Image\Group\}M6L6EYBBP@0T_K1KVDP7(C.png)
![](\Users\TONG20~1\AppData\Local\Temp\}AX7~8WW]6}CMXCJBHR7D$V.gif)
我明白了,这是为了实现继承
是为了让Person替Man初始化一些属性
但是也可以用在一些比较令人惊喜的地方,哈哈
差不多是那个意思
这个是面试时候 apply出现频率比较高的
真难理解
这个我又不理解了
因为Math.max只支持一个个的参数传递,没办法传入一个数组
所以。就是利用apply的这个特性。
我讨厌这种用法
![](\QQFile\386166552\Image\Group\MLV1492CXJ431XX)]$[EJ}0.jpg)
把语法和执行混在一起
你甚至可以在代码中生成代码然后去执行。。。
有勇无谋
再次理解javascript的apply的更多相关文章
- 理解 JavaScript call()/apply()/bind()
理解 JavaScript this 文章中已经比较全面的分析了 this 在 JavaScript 中的指向问题,用一句话来总结就是:this 的指向一定是在执行时决定的,指向被调用函数的对象.当然 ...
- 再次理解JavaScript原型链和匿名函数
<!--------------------------------------------- 1.演示匿名加载 2.js单进程执行流 3.原型链理解 a.__proto__:属性每个对象都有 ...
- 要理解javascript中间apply和call
apply和call它是javascript一个非常重要的方法,.虽然与程序平时很少接触,但JS到处都在使用这个框架2方法. 2个方法是在Function.prototype中.也就是说每一个JS函数 ...
- 再次理解javascript中的事件
一.事件流的概念 + 事件流描述的是从页面中接收事件的顺序. 二.事件捕获和事件冒泡 + 事件冒泡接收事件的顺序:
- javascript中apply、call和bind的区别,容量理解,值得转!
a) javascript中apply.call和bind的区别:http://www.cnblogs.com/cosiray/p/4512969.html b) 深入浅出 妙用Javascrip ...
- [转] 理解 JavaScript 中的 Array.prototype.slice.apply(arguments)
假如你是一个 JavaScript 开发者,你可能见到过 Array.prototype.slice.apply(arguments) 这样的用法,然后你会问,这么写是什么意思呢? 这个语法其实不难理 ...
- 图说js中的this——深入理解javascript中this指针
没搞错吧!js写了那么多年,this还是会搞错!没搞错,javascript就是回搞错! ………… 文章来源自——周陆军的个人网站:http://zhoulujun.cn/zhoulujun/html ...
- 深入理解JavaScript中创建对象模式的演变(原型)
深入理解JavaScript中创建对象模式的演变(原型) 创建对象的模式多种多样,但是各种模式又有怎样的利弊呢?有没有一种最为完美的模式呢?下面我将就以下几个方面来分析创建对象的几种模式: Objec ...
- 理解Javascript的动态语言特性
原文:理解Javascript的动态语言特性 理解Javascript的动态语言特性 Javascript是一种解释性语言,而并非编译性,它不能编译成二进制文件. 理解动态执行与闭包的概念 动态执行: ...
随机推荐
- 使用JDBC操作SAP云平台上的HANA数据库
本文假设您对JDBC(Java Database Connectivity)有最基本的了解.您也可以将其同ADBC(ABAP Database Connectivity)做对比,细节请参考我的博客AD ...
- iOS开发:自定义带下划线文本的UIButton
Uiunderlinedbutton.h代码 @interface UIUnderlinedButton : UIButton { } + (UIUnderlinedButton *) underli ...
- Codeforces Round #327 (Div. 2) B Rebranding(映射)
O(1)变换映射,最后一次性替换. #include<bits/stdc++.h> using namespace std; typedef long long ll; ; char s[ ...
- Android(java)学习笔记100:使用Dexdump等工具进行反编译
使用Dex等工具进行反编译步骤: (1)首先找到Android软件安装包中的class.dex,把APK文件改名为".zip",然后解压缩其中的class.dex文件,这是Java ...
- bzoj2600 [Ioi2011]ricehub
Description 乡间有一条笔直而长的路称为“米道”.沿着这条米道上 R 块稻田,每块稻田的坐标均为一个 1 到 L 之间(含 1 和 L)的整数.这些稻田按照坐标以不减的顺序给出,即对于 0 ...
- 破解 D-H 协议
756: 破解 D-H 协议 时间限制: 1 Sec 内存限制: 128 MB提交: 78 解决: 18[提交] [状态] [讨论版] [命题人:admin] 题目描述 Diffie-Hellma ...
- SecureCRT连接Linux
一.服务端 1.在linux上安装openssh-server服务,并确认打开了22监听端口 1)安装openssh-server:apt-get install openssh-server 2)查 ...
- flush caches
- Activiti学习记录(二)
1.初始化数据库 使用工作流引擎创建23张表 public class TestActiviti { /** * 使用代码创建工作流需要的23张表 */ @Test public void creat ...
- java,从键盘输入个数不确定的整数,并判断输入的正数和负数的个数,输入0时结束程序。
package study01; import java.util.Scanner; public class Test { public static void main(String[] args ...