函数高级② -- (原型链属性、instance、提升、执行上下文)

网友投稿 222 2022-09-06

函数高级② -- (原型链属性、instance、提升、执行上下文)

文章目录

​​原型链的属性问题​​​​instanceof​​​​变量提升与函数提升​​​​执行上下文​​

原型链的属性问题

读取对象的属性值时: 会自动到原型链中查找设置对象的属性值时: 不会查找原型链, 如果当前对象中没有此属性, 直接添加此属性并设置其值方法一般定义在原型中, 属性一般通过构造函数定义在对象本身上

从以下的例子中可以发现如上的规律:

function Fn() { } Fn.prototype.a = 'xxx' var fn1 = new Fn() console.log(fn1.a) //xxx var fn2 = new Fn() fn2.a = 'yyy' console.log(fn1.a, fn2.a) //xxx yyy

在fn2中:

instanceof

instanceof是如何判断的?

表达式: A instanceof B如果B构造函数的显式原型对象(prototype)在A对象的原型链上(换句话说有交点), 返回true, 否则返回false

Function是通过new自己产生的实例

我们可以通过以下的两个例子去理解instanceof: ①

/* 案例1 */ function Foo() { } var f1 = new Foo() console.log(f1 instanceof Foo) // true console.log(f1 instanceof Object) // true

原型链也叫做隐式原型链,所以我们的注意力要放在以__proto__为连接,以prototype为节点的线,那就是原型链。

/* 案例2 */ console.log(Object instanceof Function) // true console.log(Object instanceof Object) // true console.log(Function instanceof Function) // true console.log(Function instanceof Object) // true function Foo() {} console.log(Object instanceof Foo) // false

变量提升与函数提升

验证:

有一个需要的点:

var fn3 = function () { console.log('fn3()') }

执行上下文

①代码分类(位置)

全局代码函数(局部)代码

② 全局执行上下文

在执行全局代码前将window确定为全局执行上下文对全局数据进行预处理

开始执行全局代码

③函数执行上下文

在调用函数, 准备执行函数体之前, 创建对应的函数执行上下文对象(虚拟的, 存在于栈中的封闭区域,对外不可见)对局部数据进行预处理

开始执行函数体代码

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:DoMarketing-营销智库:又收智商税?华润雪花为何要推500元一瓶的高端啤酒?
下一篇:云游四方|观鸟、野钓、赏芦苇,夏天带孩子去湿地公园避暑!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~