构造函数模式 - JavaScript中构造函数导致的不同的作用域链和标识符解析怎么理解?
本文介绍了构造函数模式 - JavaScript中构造函数导致的不同的作用域链和标识符解析怎么理解?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
JavaScript高级程序设计中的6.2.2(p.146)中提到,构造函数模型有这样一个问题:
以这种方式创建函数,会导致不同的作用域链和标识符解析,但创建的Function新实例的新机制仍然是相同的。
这句话该如何理解呢?
解决方案
这一小节的目的是向读者说明构造函数的方式创建对象存在一个问题:每个方法都要在每个实力上重新创造一遍。
为什么呢?因为每通过构造函数new一个实例,构造函数中的代码就要执行一遍。对于字段属性来说,每个实例的字段本来就应该是独立的,当然没有问题;但是对于方法属性,我们是希望所有的实例是共享同一个的。
为了让读者明白为什么不同实例里面的方法是不同的,作者提醒读者不要忘了函数也是一种对象,是Function的实例。为了表达的更清楚,作者把方法定义从this.sayName = function(){...}
换成了this.sayName = new Function(...)
。目的是让读者不要忘记函数(方法)也是对象的本质,所以每new一次都会产生不同的方法。至于你问的问题,作者是在说:我为了解释问题,把方法定义换了一种形式,这会导致不同的作用域链和标识符解析,但是定义函数的本质不变,即不同实例得到了不同的方法。
这篇关于构造函数模式 - JavaScript中构造函数导致的不同的作用域链和标识符解析怎么理解?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文