javascript原型,原型链有什么特点

樊振勇 2019-11-05 19:28:00

推荐回答

先举一个非常简单的例子,我有一个类叫Humans和另一个对象叫Merry另一个人,很明显Tom和Merry都是由Humans这一个类实例化之后得到的,然后可以把这个例子写成如下代码:functionHumans{this.foot=2;}Humans.prototype.ability=true;varTom=newHumans;varMerry=newHumans;alertTom.foot;//结果:2alertTom.ability;//结果:truealertMerry.foot;//结果:2alertMerry.ability;//结果:true以上是一个非常简单的面向对象的例子,相信都能看懂,如果尝试修改Tom的属性ability,则functionHumans{this.foot=2;}Humans.prototype.ability=true;varTom=newHumans;varMerry=newHumans;Tom.ability=false;alertTom.foot;//结果:2alertTom.ability;//结果:falsealertMerry.foot;//结果:2alertMerry.ability;//结果:true以上可以看出Tom的ability属性的值改变了,但并不影响Merry的ability属性的值,这正是我们想要的结果,也是面向对象的好处,由同一个类实例化得到的各个对象之间是互不干扰的;OK,接下来给ability换成object对象又如何?代码如下:functionHumans{this.foot=2;}Humans.prototype.ability={run:''100米/10秒'',jump:''3米''};varTom=newHumans;varMerry=newHumans;Tom.ability={run:''50米/10秒'',jump:''2米''};alertTom.ability.run;//结果:''50米/10秒''alertTom.ability.jump;//结果:''2米''alertMerry.ability.run;//结果:''100米/10秒''alertMerry.ability.jump;//结果:''3米''以上代码就是在原型链上使用了对象,但从以上代码可以看出Tom的ability属性的改变依然丝毫不会影响Merry的ability的属性,于是乎你会觉得这样的做法并无不妥,为什么说不能在原型链上使用对象?接下来的代码就会显得很不一样,并且可以完全表达出原型链上使用对象的危险性:functionHumans{this.foot=2;}Humans.prototype.ability={run:''100米/10秒'',jump:''3米''};varTom=newHumans;varMerry=newHumans;Tom.ability.run=''50米/10秒'';Tom.ability.jump=''2米'';alertTom.ability.run;//结果:''50米/10秒''alertTom.ability.jump;//结果:''2米''alertMerry.ability.run;//结果:''50米/10秒''alertMerry.ability.jump;//结果:''2米''没错,从以上代码的输出结果可以看出Tom的ability属性的改变影响到Merry的ability属性了,于是就可以明白在原型链上使用对象是非常危险的,很容易会打破实例化对象之间的相互独立性,这就是为什么不能在原型链上使用对象的原因?是的,但我想说的可不只如此,而是其中的原理,看完后面JS原型链的深层原理之后,相信你会完全明白。在以下第二部份解释JS原型链的深层原理之前,先来明确一个概念:原型链上的属性或方法都是被实例化对象共用的,正因如此,上面的Tom.ability.run=''50米/10秒'',改动了原型连上的ability才导致另一个对象Merry受影响,既然如此,你可能会问Tom.ability={}不也是改动了原型链上的ability吗,为什么Merry没有受影响?答案是Tom.ability={}并没有改动原型链上的ability属性,而是为Tom添加了一个自有属性ability,以后访问Tom.ability的时候不再需要访问原型链上的ability,而是访问其自有属性ability,这是就近原则。
齐有伟2019-11-05 20:36:38

提示您:回答为网友贡献,仅供参考。

其他回答

  • 每个JavaScript对象内部都有一个指向其它对象的“指针”或者“引用“,并通过这种方式在对象之间建立了一种联系,形成了一种链式结构,我的理解这就是所谓的原型链。function F {} // F 是一个函数,函数也是对象,而且每个函数都有一个属性叫:"prototype"var o = new F; // F.prototype 就是 o 的原型对象console.logo.name;// 输出: undefinedF.prototype.name = "foo";console.logo.name;// 输出: foo// 上面这个例子是想说明:通过 new 在对象 o 与对象 F.prototype 之间建立了联系, 这个建立联系// 的方式有人叫 "原型继承" 。 当访问的对象属性不存在时,就会沿着原型链去查找。
    齐杭丽2019-11-05 20:18:58
  • 什么是作用域链,什么是原型链。作用域是针对变量的,比如我们创建了一个函数,函数里面又包含了一个函数,那么现在就有三个作用域全局作用域==>函数1作用域==>函数2作用域作用域的特点就是,先在自己的变量范围中查找,如果找不到,就会沿着作用域往上找。如:vara=1;functionb{  vara=2;  functionc{    vara=3;console.loga;}c;}b;最后打印出来的是3,因为执行函数c查找,这个查找的过程就叫做原型链。Object==>构造函数1==>构造函数2就和css中的继承一样,如果自身没有定义就会继承父元素的样式。functiona{};a.prototype.name="追梦子";varb=newa;console.logb.name;//追梦子。
    齐本会2019-11-05 20:03:22
  • 原型链一直是个很抽象的概念,看不到,摸不着.随着最近对JavaScript进一步的学习,我对原型链有了一点理解,下面讲出来.基础知识在JavaScript中,一共有两种类型的值,原始值和对象值.每个对象都有一个内部属性=i;Foo.prototype=newFoo;}console.dirgetPrototypeChainnewFoo;最后的这个newFoo有多少个上层原型呢。
    齐智国2019-11-05 20:02:14

相关问答

政局动荡和石油贸易的全球化使得石油价格对所有新闻消息都格外敏感。原油价格的这种敏感性对于来自炼油厂的最终石油产品来说更为重要,如汽油和柴油。但是,你在加油站所付的费用则要大大高于石油产品的成本价。为什么会有此差别?这是消费者所在国家的税收政策所造成的。对于欧洲的德国、法国、意大利和英国等国家对石油产品的税收的平均水平可达石油产品销售价格的四分之三之多。在美国,石油产品的税收仅为销售价的四分之一,这就是美国的石油产品比欧洲的要便宜得多的原因。很不幸的是,便宜的油价并没有促使消费者去节约能源,在三个重要欧洲国家的市场上,石油产品的税收为9%~27%。石油需求高度依赖于全球宏观经济条件,所以这也是确定价格的一种重要因素。一些经济学家认为,高油价已经给全球经济增长造成了负面影响:《欧佩克能源报告》,2019;《MEED》,2019。欧佩克力图将油价维持在一个将其成员作为一个整体而最佳收益的水平上,这被一些观察家认为是一种“决斗的挑战书”。2019年底,全球探明的石油储量已达119531800万桶,其中92714600万桶,或占77.6%的石油资源由欧佩克成员掌控着。2000年,全球的石油总需求量为每天7600万桶,2019年,全球经济继续增长,石油需求量增至每天8750万桶,到2019年达9060万桶/日,预计到2020年每天的石油需求量将接近10320万桶。油气开发的合作者。石油合同的毛利润基本是在三方参股的合作伙伴之间分享的。这三方为:提供的报告称,该国的储量480亿桶中仅有240亿桶为“探明储量”。然而,这一报道是基于科威特的“秘密文件泄密”情报而做出的,而且也未被科威特官方否认。此外,以前所报道过的第一次海湾战争中被伊拉克军人烧掉的15亿桶储量也没在科威特的石油储量中得以反映。另一方面,官方调查分析家们认为,石油公司一直希望造成一种假象,以便提高油价。2003年,一些分析家指出,石油生产国是了解它们自己储量的,目的就在于抬高油价。
谨慎的做法是等待数月,再检查相应指标,但其实只要IgM阴性,就不需担心了。IgG阳性表示过去曾经感染过,但并不能揭示现在是否处于活跃期;IgM阳性表示近期正在被感染,处于活跃期;所以如果已怀孕,IgG阳性,但IgM阴性,不必太担心,这表明较远的过去感染过,但现在不处于活跃期。如果,IgM阳性,也不是一定就感染到胎儿,因为有胎盘障的阻挡,多数情况下还不会影响到胎儿,当然如果需要确定,需要抽取羊水化验。对于巨细胞病毒,几乎所有成人都被感染过,体内都有该病毒,只是一直处于潜伏状态,不活跃,不表现任何病症,传染性弱。只有该病毒的IgM阳性,才具有较强传染性。所以,估计非常多的成人该病毒的IgG都可能阳性,但少数人IgM也阳性,具有传染性。该病毒只对胎儿和刚出生的新生儿具有极大影响,对一个多月大的新生儿就基本没有影响了。根据德国医学界的跟踪20年数据,巨细胞病毒IgM阳性的母乳喂养,没有发现新生儿从出生到成年体现出病症。我们当年也遇到这个担心,所以查了很多资料,尤其感到有收获的是英文资料。我妻子就是巨细胞病毒IgM阳性,比你的情况担心的多,但孩子是正常的。毕竟不幸事件概率很小,最不利的估计也是5%以内。疱疹病毒的传染我不是很清楚细节,但上述IgM、IgG总的说法也适用。另外,建议你多查看资料,妇幼保健院的诊断也理性对待,他们常夸大后果,便于赚钱和推卸潜在的医疗风险。
拉链的工作原理一般是用合力和分力的原理解释的。拉开拉链时,三角形的物体在两链间和拉链一起运动,手的拉力在三角形物体上产生了两个分力,在夹角很小的情况下,作用在尖角上的力很大,两分力向拉链施力且分力大于竖直向下的合力,即分力大于手的拉力,所以很难直接分离开的拉链很容易地被三角形分开。1、链牙有大小之分,齿形也各有不同,但同一拉链左右两边的链牙一定是大小相同的。拉链头造型富于变化,既可作拉手,又可作装饰拉链头还可作为保险,当拉链拉合后不会自动滑开。拉链的工作原理很简单,即两条拉链带通过拉头的作用,使其能随意的拉合或拉开,或者说是随意的锁住与打开.2、链牙的工作原理是,每一个齿都是一个小型的钩,能与挨着而相对的另一条布带上的一个小齿下面的孔眼相匹配。这种拉链很牢固,只有滑动器滑动使齿张开时才能拉开。扩展资料:平时用拉链应该注意的问题:对袋子上的拉链,当东西装的太多时,如果合闭拉链时硬拉,拉链受力太大,会使牙齿脱离带件,应把拉链的左右齿件拉近,使链头容易通过后,慢慢的合闭拉链。开合拉链时,有时链头咬住线带或布料而拉头拉不动:在这种情形下,如果强行拉动拉头,则会愈咬愈深,应该一方面把拉头倒退,一方面把布料解开。完全咬进去时,不要大力拉动拉头,请慢慢倒退拉头。拉链。