理解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(…) 的重返值。

发表评论

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