普通函数执行的时候,this指向函数执行的上下文

 其实就是一个原型链的结构。。。
 
 我一直没有搞懂原型链
莫非它们像链条一样连在一起?
 
 昂。。。
 
原型链可以理解成继承吗?
 
就像,java里边的继承吧
嗯嗯
刚想说这个
 
 写js的时候一般没用到这里,还有apply()和call()一直搞不清
太灵活了,不知道是什么,想要干啥
 
 
 ES6新的语法来讲,你可能会看着比较熟悉了

call 和 apply就是绑定一个函数执行的 this指向

觉apply()和代码上下文有很大关系

这意思是修改父类吗?

 不是。。
 
 那我又不懂了
修改this指向是为了啥?
有何图谋?
 
 昂。。。
我想下场景哈
 
我明白了,是不是修改执行范围?
 

我个人认为。。。apply 和 call 之前的作用其实主要的作用就是为了实现原型链的继承

 比如appply(a)
apply前面的这个对象就会变成a的属性?
 
 
 不是变成a的属性。。。
而是本次执行的 函数执行的上下文变成了a
 

你的意思是只是在a中执行,但是和a没关系?

也就是说

XXX.apply(a)

XXX在执行的时候 你在里边调用 this 其实就是 a

 
 
只是用下a的属性和其他数据字段?
 

是的呢。

我擦,js好底层啊

 跟python有点像
 

c#绝对做不到

 不过太狗屎了,别用this啊
用个其他变量也行啊
 
 
 // 我有一个类,会生成两个属性,一个name 一个age

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

 
粗暴的将prototype地址赋值过去。。

就是这一句,会执行Person的代码,但是此时的this ,其实是Man实例化的上下文

 是早年继承的一种写法

这是近两年的新方法 
 

我明白了,这是为了实现继承

是为了让Person替Man初始化一些属性

但是也可以用在一些比较令人惊喜的地方,哈哈

差不多是那个意思

这个是面试时候 apply出现频率比较高的

一个小技巧吧。
 
 
 person的属性man都有了吗?

真难理解

这个我又不理解了

 昂。。 apply第二个参数是一个数组,作为被apply的函数的参数依次塞进去。
因为Math.max只支持一个个的参数传递,没办法传入一个数组
所以。就是利用apply的这个特性。
 
 我不想说什么
我讨厌这种用法 
 
 
 JS好就好在了。。。各种你想象不到的代码
 
 这说明javascript的思想不统一
把语法和执行混在一起
 
 
 昂。。
你甚至可以在代码中生成代码然后去执行。。。
 
 原谅我智商不够
有勇无谋
 
 元编程吗?
 
 就是将一串字符串作为代码来执行而已……
 
 
以上内容整理自和一个前端大牛的聊天,感谢大牛!
差不多终于理解apply是为了实现继承,当执行时,呼叫父类帮忙初始化属性。
先理解到这里。
 
 
 
 
 
 
 

再次理解javascript的apply的更多相关文章

  1. 理解 JavaScript call()/apply()/bind()

    理解 JavaScript this 文章中已经比较全面的分析了 this 在 JavaScript 中的指向问题,用一句话来总结就是:this 的指向一定是在执行时决定的,指向被调用函数的对象.当然 ...

  2. 再次理解JavaScript原型链和匿名函数

    <!--------------------------------------------- 1.演示匿名加载 2.js单进程执行流 3.原型链理解 a.__proto__:属性每个对象都有 ...

  3. 要理解javascript中间apply和call

    apply和call它是javascript一个非常重要的方法,.虽然与程序平时很少接触,但JS到处都在使用这个框架2方法. 2个方法是在Function.prototype中.也就是说每一个JS函数 ...

  4. 再次理解javascript中的事件

    一.事件流的概念 + 事件流描述的是从页面中接收事件的顺序. 二.事件捕获和事件冒泡 +    事件冒泡接收事件的顺序:

  5. javascript中apply、call和bind的区别,容量理解,值得转!

    a)  javascript中apply.call和bind的区别:http://www.cnblogs.com/cosiray/p/4512969.html b)  深入浅出 妙用Javascrip ...

  6. [转] 理解 JavaScript 中的 Array.prototype.slice.apply(arguments)

    假如你是一个 JavaScript 开发者,你可能见到过 Array.prototype.slice.apply(arguments) 这样的用法,然后你会问,这么写是什么意思呢? 这个语法其实不难理 ...

  7. 图说js中的this——深入理解javascript中this指针

    没搞错吧!js写了那么多年,this还是会搞错!没搞错,javascript就是回搞错! ………… 文章来源自——周陆军的个人网站:http://zhoulujun.cn/zhoulujun/html ...

  8. 深入理解JavaScript中创建对象模式的演变(原型)

    深入理解JavaScript中创建对象模式的演变(原型) 创建对象的模式多种多样,但是各种模式又有怎样的利弊呢?有没有一种最为完美的模式呢?下面我将就以下几个方面来分析创建对象的几种模式: Objec ...

  9. 理解Javascript的动态语言特性

    原文:理解Javascript的动态语言特性 理解Javascript的动态语言特性 Javascript是一种解释性语言,而并非编译性,它不能编译成二进制文件. 理解动态执行与闭包的概念 动态执行: ...

随机推荐

  1. java Vamei快速教程20 GUI

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! GUI(Graphical User Interface)提供了图形化的界面,允许 ...

  2. linux 命令——46 vmstat(转)

    vmstat 是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.CPU活动进行监控.他是对系统的整体情况进行统计,不足之处是无法对某个进程进行 ...

  3. Android(java)学习笔记154:采用HttpClient提交数据(qq登录案例)

    1.Apache -Httpclient HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包 ...

  4. 【51nod1443】路径和树(堆优化dijkstra乱搞)

    点此看题面 大致题意:给你一个无向联通图,要求你求出这张图中从u开始的权值和最小的最短路径树的权值之和. 什么是最短路径树? 从\(u\)开始到任意点的最短路径与在原图中相比不变. 题解 既然要求最短 ...

  5. 【BZOJ1057】[ZJOI2007] 棋盘制作(单调栈的运用)

    点此看题面 大致题意: 给你一个\(N*M\)的\(01\)矩阵,要求你分别求出最大的\(01\)相间的正方形和矩形(矩形也可以是正方形),并输出其面积. 题解 这题第一眼看去没什么思路,仔细想想,能 ...

  6. vue安装环境

    vue安装环境 1. 安装node.js 先在电脑上安装node.js, https://nodejs.org/en/ 可以点击链接安装. 安装成功后,在命令板里检测是否安装成功, node -v 2 ...

  7. NET_Framework_4.0installer.rar

    部署提示: 1.首先下载有关的安装程序 NET_Framework_4.0installer.rar 这是我整理好的四个软件(大致一共10MB),分别如下 WindowsInstaller-KB893 ...

  8. Java代码工具箱之解析单行单列简单Excel

    1. 使用开源工具 jxl.jar 2. 功能:解析常规Excel.xls格式测试可行,xlsx未测试.Excel测试格式为常规类似table这种简单布局文件.第一行为标题,后面行为内容.代码 可正确 ...

  9. Nginx学习记录(二)

    1. 什么是反向代理 正向代理 反向代理: 反向代理服务器决定哪台服务器提供服务. 返回代理服务器不提供服务器.也是请求的转发. 反向代理(Reverse Proxy)方式是指以代理服务器来接受Int ...

  10. c++ 程序设计question 001:我们的开发工具是什么?

    我们使用的开发工具是dev cpp (c plus plus),这是一个集成开发环境,我们称之为IDE(integrated development environment)