普通函数执行的时候,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. iOS解析新浪微博的@##以及URL链接并展示

    最近在做一个跟微博相关的应用.其中涉及到了对微博中@.##以及URL链接的解析与展示.分享一下个人处理的方式,希望对需要的人有所帮助. 最终的展现效果: 首先,第一步是你得从纯文本中找到它们.毫无疑问 ...

  2. 2dsphere索引

    概念:球面地理位置索引 创建方式: db.collection.ensureIndex({w:'2dsphere'}) wdspere中,位置的表示方式不再是简单的经度,纬度,数组,而是变成一种复杂的 ...

  3. 2018.6.20 Java考试试题总结(Java语言基础与面向对象编程)最新版

    Java考试试题总结 一.单选题(每题1分 * 50 = 50分) 1.java程序的执行过程中用到一套JDK工具,其中javac.exe指( B ) A.java语言解释器 B.java字节码编译器 ...

  4. 阿里云服务器下安装LAMP环境(CentOS Linux 6.3) 安装与配置 php

    下面我们一起为服务器安装 PHP,在使用 yum 安装软件包的时候,yum 会去默认的资源库里查看我们要安装的软件包,然后到指定的服务器上下载并安装. 但是有的时候,我们要安装的软件包并没有包含在默认 ...

  5. angular2新建组件

    1,使用ng g c hello 创建一个新的组件 它创建了4个文件,并更新了app.module.ts 如果想访问这个组件,只需要添加它的路由 成功访问这个组件 Import语句定义了我们需要用到的 ...

  6. package.json字段分析

    分析1.必须在包的顶层目录下2.二进制文件应该在bin目录下3.javascipt在lib目录下4.文档在doc目录下 package.json字段分析 name:包的名称,必须是唯一的,由小写英文字 ...

  7. django-redis缓存记录

    对于站点缓存,我们使用redis这款key-value数据库.Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径.Redis的数据类型都是基于基本数据结构的 ...

  8. python从入门到精通之30天快速学python视频教程

    点击了解更多Python课程>>> python从入门到精通之30天快速学python视频教程 课程目录: python入门教程-1-Python编程语言历史及特性.mkv pyth ...

  9. JZOJ 5835 Prime

    Description

  10. linux硬件基础

    1. 服务器分类 机架式服务器(主要用这个). 刀片式服务器. 塔式服务器. 2. 机架式服务器 服务器的尺: U - 2U. 服务器核心之电源: 双电源 AB 路. 服务器核心之 CPU-计算 CP ...