栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaScript使用原型相对于直接在构造函数中定义方法的优势?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaScript使用原型相对于直接在构造函数中定义方法的优势?

通过原型链继承的方法可以针对所有实例进行通用更改,例如:

function Class () {}Class.prototype.calc = function (a, b) {    return a + b;}// Create 2 instances:var ins1 = new Class(),    ins2 = new Class();// Test the calc method:console.log(ins1.calc(1,1), ins2.calc(1,1));// -> 2, 2// Change the prototype methodClass.prototype.calc = function () {    var args = Array.prototype.slice.apply(arguments),        res = 0, c;    while (c = args.shift())        res += c;    return res; }// Test the calc method:console.log(ins1.calc(1,1,1), ins2.calc(1,1,1));// -> 3, 3

请注意如何更改应用于两个实例的方法?这是因为

ins1
ins2
共享相同的
calc()
功能。为了使用在构造过程中创建的公共方法来执行此操作,您必须将新方法分配给已创建的每个实例,这是一项艰巨的任务。这是因为
ins1
并且
ins2
将具有自己的,单独创建的
calc()
功能。

在构造函数内部创建方法的另一个副作用是性能较差。每次构造函数运行时,都必须创建每个方法。原型链上的方法创建一次,然后由每个实例“继承”。另一方面,公共方法可以访问“私有”变量,而继承方法是不可能的。

至于您的

function Class() {}
vs
varClass=function(){}
问题,在执行之前,前者已“提升”到当前作用域的顶部。对于后者,将悬挂变量声明,而不是赋值。例如:

// Error, fn is called before the function is assigned!fn();var fn = function () { alert("test!"); }// Works as expected: the fn2 declaration is hoisted above the callfn2();function fn2() { alert("test!"); }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/456677.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号