普通函数执行的时候,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. 如何在SAP Cloud for Customer自定义BO中创建访问控制

    文章作者: Yi 已获得Yi的转载许可. 访问控制方式和使用注意事项 1. C4C中的访问控制有两种方式 RelevantForAccessControl AccessControlContext 2 ...

  2. 在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务

    我的前一篇文章 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数介绍了在SAP云平台的Neo环境下如何通过SAP Cloud Conne ...

  3. Python自学之路——自定义简单装饰器

    看了微信公众号推送的一道面试题,发现了闭包的问题,学习时间短,从来没有遇到过这种问题,研究一下. Python函数作用域 global:全局作用域 local:函数内部作用域 enclosing:函数 ...

  4. 2018.1.4 UML 第三章 用例图

    第三章 用例图 (1)参与者 是指系统以外的需要使用系统或与系统交互的外部实体,吧阔人.设备.外部系统等. (2)参与者之间的关系 泛化关系的含义是参与者的共同行为提取出来表示成通用行为,并描述成超类 ...

  5. nodejs fs路径

    引用:https://www.cnblogs.com/guangzhou11/p/7705257.html require()别的js文件的时候,将执行那个js文件. 注意: require()中的路 ...

  6. Finders Keepers-freecodecamp算法题目

    Finders Keepers 1.要求 写一个 function,它遍历数组 arr,并返回数组中第一个满足 func 返回值的元素. 举个例子,如果 arr 为 [1, 2, 3],func 为 ...

  7. Java读取各种文件格式内容

    所需的jar包哦也不要太记得了,大家可以搜搜,直接上代码: import java.io.BufferedInputStream; import java.io.File; import java.i ...

  8. nginx安装与部署

    1:安装工具包 wget.vim和gcc yum install -y wget yum install -y vim-enhanced yum install -y make cmake gcc g ...

  9. 项目实战8.1—tomcat企业级Web应用服务器配置与会话保持

    分类: Linux架构篇   tomcat企业级Web应用服务器配置与实战 环境背景:公司业务经过长期发展,有了很大突破,已经实现盈利,现公司要求加强技术架构应用功能和安全性以及开始向企业应用.移动A ...

  10. Python 正则表达式 search vs match

    search()和match()函数都是正则表达式中的匹配函数,二者有何区别呢? 1.match()从string的开始位置进行正则匹配,即从0位置开始匹配,若匹配上则返回一个match对象,否则返回 ...