普通函数执行的时候,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. Windows环境下的Chocolatey安装使用

    Chocolatey是一个软件包管理工具,类似于Ubuntu下面的apt-get,不过是运行在Windows环境下面 电脑 Powershell 方法/步骤 安装 Chocolatey的安装需要: P ...

  2. [VC]VC实现开机自动运行程序

    有时候,我们需要在计算机启动的时候就启动某些程序,不要人干预.这里,提供一种让程序开机自动运行的方法.见下面代码: BOOL CXXX::SetAutoRun(CString strPath) { C ...

  3. 拷贝时间测试=cudamelloc+cudahostalloc

    /* * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. * * NVIDIA Corporation and its lic ...

  4. ASP.NET补充

    字典类的子集 using System.Collections.Generic; Dictionary<string, string> dicB = new Dictionary<s ...

  5. Java 程序设计总复习题

    Java程序设计总复习题 1.编写一个Java程序在屏幕上输出“你好!”. //programme name Helloworld.java public class Helloworld { pub ...

  6. 统计学基于SPSS贾俊平 授课笔记 发布作业 spss19cn 软件下载地址及破解包spss19_10039 下载地址

    spss19cn软件下载地址及破解包spss19_10039 软件包下载地址一 http://www.33lc.com/soft/41991.html 软件包下载地址二 http://dl.pconl ...

  7. SummerVocation_Learning--java的自动打包与解包

    Auto Boxing: 自动将基础类型转换成对象(JDK1.5之后支持) Auto UnBoxing:自动将对象转换成基础类型 如 Map中的put方法,如果要传入键值对<a,1>,&l ...

  8. GoF23种设计模式之创建型模式之单态模式

    1概述 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 2适用性 1.当类只能有一个实例而且客户可以从一个总所周知的访问点访问它的时候. 2.当这个唯一实例应该是通过子类化可扩展的,并且客户应 ...

  9. 笔记-python-standard library-8.1 data types-datetime

    笔记-python-standard library-8.1 data types-datetime 1.      Datatimes 本章节内容为日期和时间处理类和方法. 1.1.    date ...

  10. 【java】实体类中 Set<对象> 按照对象的某个字段对set排序

    Java利用hibernate进行一对多查询时,把另一张表作为一个属性存进这张表的字段中,返回的类型是set类型,要对返回的set类型进行排序 user表 package onlyfun.caterp ...