【问题标题】:What Internal Property In ECMAScript is defined for?ECMAScript 中的内部属性是为什么定义的?
【发布时间】:2012-06-15 17:03:35
【问题描述】:

ECMAScript 中的Internal Property 是为了什么而定义的?规范是什么意思

本规范使用各种内部属性来定义 对象值的语义。这些内部属性不是 ECMAScript 语言。它们由本规范定义 纯粹出于说明目的。

这是否意味着 ECMAScript 定义的内部属性不可用于编程。它们用于 javascript 引擎的实现

【问题讨论】:

标签: javascript ecmascript-5


【解决方案1】:

内部属性定义代码在执行时的行为,但不能通过代码访问。 ECMAScript 为 JavaScript 中的对象定义了许多内部属性。内部属性用双方括号表示。

例如,JavaScript 函数是一个对象,它具有 [[call]] 属性。 [[call]] 属性是函数独有的。

另一个内部属性示例是 [[prototype]] 属性。该属性是一个指针,指向实例正在使用的原型对象。由于无法通过代码访问内部属性,因此对象实例化无法访问原型,而其属性对对象都是可用的。您可以在对象上使用 Object.getPrototypeOf() 方法获取 [[prototype]] 属性的值。

var obj = new Object();
var prototype = Object.getPrototypeOf(obj);
console.log(prototype == Object.prototype);

【讨论】:

    【解决方案2】:

    经常使用的例子是内部属性[[prototype]],所有对象都有一个但是你不能直接访问它例如。

    function foo(){
        this.first = "hi"
        this.second = something
    }
    foo.prototype = {
        constructor : foo,
        anotherProp : "hello"
    }
    
    var obj = new foo();
    
    console.log(obj.anotherProp); //hello
    //here the runtime will look in obj for anotherProp and
    //fail to find it so it will look in obj's internal property
    //[[prototype]] which is pointing to the object foo.prototype
    

    因此您可以访问内部属性 [[prototype]] 指向的对象,但不能直接通过内部 [[prototype]] 属性访问,该属性仅供运行时使用,而不是程序员使用。

    【讨论】:

      【解决方案3】:

      这是否意味着 ECMAScript 定义的内部属性不可用于编程。它们用于javascript引擎的实现?

      是的。它们仅用于实现目的,不需要“实名”。您可以在#8.6.2 Object Internal Properties and Methods 中阅读相关内容。

      【讨论】:

        【解决方案4】:

        它们被用于一个如何实现 JavaScript 引擎的示例中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-29
          • 2014-08-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-21
          • 2017-01-04
          • 2011-05-15
          相关资源
          最近更新 更多