知情JavaScript的原型属性,的原型属性

知晓JavaScript的原型属性

2016/06/21 · JavaScript
· 2 评论 ·
原型

本文由 伯乐在线 –
alvendarthy
翻译,sunshinebuel
校稿。未经许可,禁绝转发!
波兰语出处:bytearcher。招待参与翻译组。

理解 JavaScript
prototype性能不太轻易。你或然知道它同面向对象编制程序(OOP)和对象承袭有关,但不见得对其手艺原理非常精通。

1.原型三回九转

  面向对象编制程序能够由此众多路线实现。其余的言语,比方Java,使用基于类的模型完成: 类及对象实例分裂对待。但在 JavaScript
中尚无类的定义,替代它的是整整皆对象。JavaScript
中的继承通过原型承继完毕:三个对象直接从另一对象承继。对象中隐含其继续种类中祖先的引用——对象的
prototype 属性。

原型承继

面向对象编制程序能够经过众多路线完结。其余的言语,举例Java,使用基于类的模型达成: 类及对象实例不相同看待。但在 JavaScript
中从不类的定义,代替他的是百分之百皆对象。JavaScript
中的承接通过原型承接达成:三个对象直接从另一指标承袭。对象中饱含其后续体系中祖先的引用——对象的 prototype 属性。

class 关键字是在 ES6 中第三回引进 JavaScript
的。其实,它并从未为面向对象承袭引进新模型, class
关键字通过语法糖,达成了本文介绍的原型特性和构造函数。

2. JavaScript 达成连续的言语特色

  • 当尝试访问 JavaScript
    对象中不设有的属性时,分析器会查找匹配的目的原型。举例调用
    car.toString(),假如 car 没有 toString 方法,就能够调用 car
    对象的原型。 那几个查找进程会从来递归,
    直到寻觅到特别的原型可能承继链尽头。

  • 调用  new Car()
    会创制二个新的目的,并初步化为 Car.prototype。
    那样就允许为新对象设置原型链。须要小心的是,new Car() 独有当  Car 是函数时才有意义。
    此类函数即所谓构造函数

  • 调用对象的一个成员函数时, this
    的值被绑定为眼前目的。比如调用 “abc”.toString(),this 的值被设置为
    “abc”,然后调用 toString 函数。该技巧援助代码重用:同样的代码,可在
    this
    为各个分化的值时调用。对象的积极分子函数,也被称呼对象的点子。

   图片 1

  首先,大家定义构造函数 Rectangle。
依据规范,我们大写构造函数名首字母,注脚它能够用 new
调用,以示与任何常规函数的区分。构造函数自动将 this
赋值为一空对象,然后代码中用 x 和 y 属性填充它,以备后用。然后,
Rectangle.prototype 新添三个透过 x 和 y 属性计算周长成员函数。 注意 this
的施用,在分裂的靶子中,this
会有分化的值,那一个代码都得以正常办事。最终, 三个名字为 rect
的靶子创制出来了。 它一而再了 Rectangle.prototype, 我们能够调用
rect.perimeter(), 然后将结果打字与印刷到调整台。

JavaScript 完毕一连的语言特征

以下语言特征共同完毕了 JavaScript 承袭。

  • 当尝试访谈 JavaScript
    对象中空头支票的性质时,深入分析器会查找相称的指标原型。举例调用 car.toString(),如果
    car 没有 toString 方法,就能调用 car 对象的原型。
    这几个查找进程会一贯递归, 直到搜索到突出的原型只怕承接链尽头。
  • 调用  new Car() 会制造一个新的靶子,并初阶化为 Car.prototype
    那样就允许为新对象设置原型链。供给潜心的是,new Car()
    只有当  Car 是函数时才有意义。 此类函数即所谓构造函数。
  • 调用对象的多个分子函数时, this
    的值被绑定为当下目的。比如调用 "abc".toString()this
    的值被设置为 "abc",然后调用 toString
    函数。该技能帮助代码重用:一样的代码,可在 this
    为各样差别的值时调用。对象的分子函数,也被誉为对象的点子。

prototype 属性名称带来的误解

  有局地有关 JavaScript 的原型的误会。
二个对象的原型与目的的 prototype 属性并不是二遍事。
前面二个用于在原型链中相称空头支票的品质。后面一个用于通过 new
关键字成立对象,它将用作新创造对象的原型。
驾驭二者的分化,将援救您根本事略 JavaScript 中的原型个性。

  Rectangle.prototype 是用 new
Rectangle() 创造出来目的的原型, 而 Rectangle 的原型实际上是 JavaScript
的 Function.prototype。(子对象的原型是父对象的 prototype 属性
对象中保留原型的变量,也被称为内部原型援引(the internal prototype
link),历史上也曾称之为 __proto__ ,对这么些称号始终存在一些争论。
更标准的,它能够被叫做 Object.getPrototypeOf(…) 的重临值。

发表评论

电子邮件地址不会被公开。 必填项已用*标注