js bind 传参、_js中的面向对象(一)
面向对象要解决的问题
提到面向对象,大家的第一反应就是封装、继承和多态。对其做如下解释:
- 封装:影藏细节(A对A——将多行代码取个名字或A对B——API调用合作)
- 继承:继承的意思就是同上跟上述一样,直接用另外一件事情的属性和方法,只需要写自己需要的属性和方法即可。
- 多态:一个东西拥有两种或者多种东西的属性
因此,封装使我们减少沟通成本,也减少思维负担;继承可以让我们复用代码;而多态可以使一个东西更加灵活。
封装、继承、多态并不是面向对象终极需求,而是写代码的套路问题(定势思维)
封装和继承
JS中跟类对应的叫做构造函数
JS的七种数据类型:Number,String,bool,undefined,null,symbol(存的是值),object(复杂类型、引用类型、对象,存的是内存地址)。
而Object包括如下三种情形:
- 普通对象
- 数组
- 函数(重中之重)
原型链(对象与对象)
var
如上定义一个obj,我们可以访问name和age,但是我们可以访问obj.toString(),那么toString方法来自哪里?在控制台使用console.dir()可以看到toString方法来自__proto__。
但是,在编程中,不要使用obj.__proto__来访问,这样访问会造成很多性能上的降低。
var
问:若没有声明一个对象,则怎么访问__proto__呢?
window中有一个Object,使用window.Object可以得到,规定在window.Object中必须有一个protoType去存声明对象的__proto__的内存地址,因此可以通过window.Object.protoType得到跟声明对象中一致的__proto__
window
问:原型链只能有一个吗?怎么实现Array中有push,而Object中没有push呢?
Array的__proto__和Object的__proto__不一样。Array的__proto__中有push、pop等方法,而Array的__proto__的__proto__中有toString、valueOf等方法。如下图所示:
因此obj.__proto__.__proto__被称作原型链。大写的Object是天生就有的,本身就有prototype属性的,而小写的object是声明的Object,必须声明之后才会有__proto__属性。
var
JS没有类,只需要给每一个加一个__proto__属性就可以实现继承。
this(对象与函数)
函数是什么?
函数是一种可执行代码组成的对象。
为什么说函数就是对象呢? 函数的本质是字符串再加上一些其他的东西。
var
var
但是,我们还是觉得很智障,为什么要在写过之后还要传参进去?那么我们是否可以不传参数,访问该对象呢?按照obj.sayName()即可访问呢?那么问题来了。在上述的对象中sayName中是有参数的,为什么在调用的时候不需要传入了呢?因此,js引入了this表示自己。改造成如下:
var
再看一个。
var
函数是独立的东西,不是一个附属品,只接受一个输入,并且有一个输出。在不使用call的时候,this会隐式的传进去,则不能很快速明确的确定this的指代。JS中有两个参数,一个是this,另一个是arguments。显式的this则使用call调用,隐式的this则浏览器去猜。
从上述可以得出如下两个结论:
- 参数的值只有在传参的时候确定
- this是第一个参数 => 推断得出 this的值只有在传参的时候才能确定。
那么我们来看看如下的this都指代什么?
function
再看看别的this的指代情况。
button
以上仅限于隐式调用时this指代的情况。若写为button.onclick.call(1),则此时的this为传入的参数。
为了解决this的事情,js引入了箭头函数,此时就算call也不会改变this的值。call的时候,this指代的都为外面的this。箭头函数中既没有this,也没有arguments。
函数和对象本来没有关系,通过隐式的this才会有了关系。若使用call,则this是明确的值,即为第一个传入的参数。
bind用法
bind即为创建了一个新的函数,会call原先函数的参数,传入的参数则为this和arguments。
js bind 传参、_js中的面向对象(一)相关推荐
- js bind 传参、_Node.js 在企业中的应用实践集锦
Node.js 在企业中的应用实践 在和一些 Nodeer 童鞋的分享交流过程中,也会听到一些声音:"Node.js 在企业中是如何应用的?有哪些大厂在实践?",于是公众号 &qu ...
- js bind 传参、_Node.js 在微医的应用场景及实践
我是来自微医集团消费事业群的前端工程师高翔,这篇文章整理自我在<第一届缤纷前端技术沙龙>的主题分享<Node.js 在医疗行业的应用>,介绍了 Node.js 在微医的发展历程 ...
- url 编码 js url传参中文乱码解决方案
前后台用js传参过程中,如果是中文就容易出现乱码,所以最好是先编码. 1.配置文件web.config中 在节中加上整个网站的编码方式. <globalization fileEncoding ...
- JS函数传参时:值传递与引用传递的区别
JS函数传参时:值传递与引用传递的区别 一.先分析基础数据与复杂数据的区别 : 基本数据类型:Undefined.Null.Boolean.Number.String 引用数据类型:对象 如:var ...
- 论JS函数传参时:值传递与引用传递的区别
JS函数传参时:值传递与引用传递的区别? 值传递:值传递的数据为基本数据类型,基本数据类型在内存中存放的是数值本身:值传递为单向传递,只能由实参传递给形参. 引用传递:引用传递的数据为复杂数据类型,复 ...
- esp和ebp在传参过程中的变化和作用
栈帧 esp和ebp在传参过程中的作用和连续:(12条消息) 函数调用过程中的栈帧结构及其变化_AC-NEWBIE的博客-CSDN博客_函数调用栈帧结构 从汇编角度深刻理解函数调用过程 (参数如何传递 ...
- pdf.js 请求传参关键词并高亮显示
pdf.js 请求传参关键词并高亮显示 1.去官网下载: http://mozilla.github.io/pdf.js/getting_started/#download 2.将下载的包copy到s ...
- js onclick传参对象_js中onClick([object object])的传参问题。跪求!
你的位置: 问答吧 -> JavaScript -> 问题详情 js中onClick([object object])的传参问题.跪求! 问题是这样的,看代码 for(var i=0;i ...
- js调java并传参_Js调用Java方法并互相传参的简单实例
Js通过PhoneGap调用Java方法并互相传参的. 一.JAVA代码 写一个类,该类继承自Plugin并重写execute方法. import org.json.JSONArray; import ...
最新文章
- NHibernate和Cuyahoga(二)(翻译):
- 远程办公中的IT女性:工作量增加3倍,离职率却下降近50%
- 如何配置网络地址转换(NAT)—Vecloud微云
- C++ Primer 5th笔记(chap 14 重载运算和类型转换)标准库函数对象
- python硬件交互_Python操作系统库说明,pythonos,笔记
- metric learning -- 马氏距离与欧氏距离
- c语言putchar_C语言实现变色的心!连机器都会变心,呵,男人!
- Kubernetes 和 Docker,到底什么关系?
- linux系统查看磁盘信息
- 20145321 实验三实验报告
- 怎样永久关闭Win10自动更新_win10官网
- 《遥感原理与应用》第三版——思维导图
- ArcGIS for Desktop 10.2安装破解与使用图文详解
- 3分钟快速了解,如何一次通过CISSP考试?
- 关于数据分析岗位的工作思考
- 强网杯2021——wp
- 读文献——《Going deeper with convolutions》
- 30几个HTML5经典动画应用回顾 让你大饱眼福
- MAC地址和IP地址说明
- 《基于Python的大数据分析基础及实战》第一章
热门文章
- dismiss ios pop效果_iOS 动画框架pop使用方法
- 电脑屏保海底世界_世界上最后一个深海实验室,隐藏了人类未来的秘密
- linux 检测mysql链接_MySQL笔记
- IndexError: tensors used as indices must be long, byte or bool tensors
- Elsevier LaTeX时间-年份(author-year)两种引用格式
- python matplotlib画图改变图标题和坐标轴标题的字体大小
- Python计算信息熵
- 二隐层的神经网络实现MNIST数据集分类
- MFC空间几何变换之图像平移、镜像、旋转、缩放
- 国家信息安全公布:向日葵爆出执行漏洞,还有什么远程工具值得信赖?