原型链,闭包,new操作符创建一个对象时做了什么,call和apply和bind 原型链是什么?

原型链,闭包,new操作符创建一个对象时做了什么,call和apply和bind 原型链是什么?

原型链是什么?
在这里插入图片描述
此时在控制台下可以找到这个对象的原型(就是这个对象的爹)对象很弱,但是他爹厉害了,这里的concat实际是他爹的功能,他可以拿来用。往下再看他的父亲还有一个__proto__就是他的爷爷,他的爷爷也有一些功能,从他到他爹到他爷爷就是一条原型链
在这里插入图片描述
一个普通的对象他只有个爹,object.getprototypeof(获取指定对象的原型对象)就是判断他俩是不是一个爹,经判断这两个对象即hd和xj他俩有一个共同的爹。
在这里插入图片描述

hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员
这个xj有个爹,他爹有个方法叫hasOwnProperty 判断xj有没有这个name的属性,返回true。
而这个hd他没有爹,没有这个方法,报错。
所以有的对象没有原型

闭包
闭包实例
var iBaseNum = 10;

function addNum(iNum1, iNum2) {
function doAdd() {
return iNum1 + iNum2 + iBaseNum;
}
return doAdd();
}

函数 addNum() 包括函数 doAdd() (闭包)doAdd() 函数根本不接受参数,它使用的值是从执行环境中获取的
闭包的特征
在一个函数中返回另外一个函数
在这个另外函数可以访问函数的局部变量和方法
这些局部函数和方法会一直保存在内存中
一般来说,当函数执行完了之后,该执行环境就被销毁,该环境的局部活动对象也会被销毁,内存仅保存全局执行环境的变量对象,但是,如果函数形成闭包,即在函数中返回另外一个函数,而在这个函数中会将包含它(外部)的函数的活动对象添加到作用域链上,既然这个活动对象还在另外一个函数的作用域链下,所以它就没有被销毁,一直保存的内存中,直到该闭包函数被销毁。

new操作符创建一个对象时做了什么
第一步:创建一个空对象,关联构造函数的原型对象。
第二步:执行构造函数,改变this的上下文,给创建的空对象属性赋值
第三步:判断第二部执行返回的是不是对象
第四步:返回
在这里插入图片描述
(图源知乎刘云客)

call和apply和bind
1.1 Function.prototype.apply()
apply() 方法调用一个函数, 其具有一个指定的this值,以及作为一个数组(或类似数组的对象)提供的参数。
语法:
func.apply(thisArg, [argsArray])
1.2 Function.prototype.call()
call() 方法调用一个函数, 其具有一个指定的this值和分别地提供的参数(参数的列表)。
语法:
fun.call(thisArg, arg1, arg2, …)
1.3 Function.prototype.bind()
bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列。
语法:
fun.bind(thisArg, 队列or数组)()
bind方法与call、apply最大的不同就是前者返回一个绑定上下文的函数,而后两者是直接执行了函数
.bind 是返回对应函数,便于稍后调用;apply 、call 则是立即执行 。
深拷贝浅拷贝
浅拷贝(shallow copy):只复制指向某个对象的指针,而不复制对象本身,新旧对象共享一块内存;  
深拷贝(deep copy):复制并创建一个一摸一样的对象,不共享内存,修改新对象,旧对象保持不变;实现深拷贝主要有2种方法:(1)递归(2)JSON.stringify结合JSON.parse

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值