控制台上功能与对象的原型属性的可见性

这个问题在这里已经有了答案:

  • [[Prototype]] vs原型:..有什么区别? (MyCons .__ proto__ === MyCons.prototype)等于FALSE 2答案
  • JavaScript .prototype如何工作? 21个答案

  • 名为.prototype的属性只是构造函数的一个属性。 它存储在其他地方用于实际的对象实例,并且不能以.prototype访问。

    在现代浏览器中,可以使用Object.getPrototypeOf(obj)来获取对象实例的原型。 详情请参阅MDN。

    在一些较旧的浏览器中,您可以使用obj.__proto__来获得它。


    在对象实例上访问原型本身没有共同的理由。 这意味着创建新对象的配方,访问它的位置在构造函数上,因为它控制着如何创建新对象。 它在Javascript内部由一个对象实例使用,因此它被内部存储。 如果你问为什么这样设计一个基于原型的语言,那么你问的是错误的人 - 这就是基于原型的系统是如何设计使用的。

    您打算与对象实例上的实际属性值进行交互,而不是与原型进行交互。 访问原型的中心地点是通过构造函数。 通过改变现有实例的原型来变形现有对象实例有一些特殊情况,但这不是基于原型的编程中的常见设计范例。

    在C ++中(它不是基于原型的语言,但共享一些面向对象的概念),如果要更改如何创建该类型的新对象,则需要更改类定义。 您不要更改某个类的一个实例,并期望它改变如何创建该类型的新对象。


    首先,你是对的,JavaScript中的每个数据结构都有自己的原型。 但是,在语言语法层面上, 只有函数具有prototype属性

    那么别人呢? 那么你不能用财产关键。 你想到的其实是语言引擎的内部。 如果您阅读ECMAScript规范,您会注意到几个章节中的[[Prototype]]

    以前,某些浏览器提供了一个__proto__属性,它使您能够访问[[Prototype]],但它是一个供应商功能,而不是规范的一部分,因此不可靠。

    现在在ES6中有一个用于这种目的的新方法: Object.getPrototypeOf()

    还有一点,请考虑instanceof操作符。 它实际上将对象的__proto__与构造函数的prototype属性进行比较。

    链接地址: http://www.djcxy.com/p/30089.html

    上一篇: Visibility of prototype property of a function vs. object on console

    下一篇: what javascript prototype.constructor for?