ECMAScript中定义的内部属性是什么?

时间:2012-06-12 18:57:57

标签: javascript ecmascript-5

ECMAScript中Internal Property的定义是什么?

指的是什么规格
  

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

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

4 个答案:

答案 0 :(得分:8)

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

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

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

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

答案 1 :(得分:4)

  

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

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

答案 2 :(得分:1)

常用的例子是内部属性[[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 :(得分:0)

它们用在如何实现JavaScript引擎的示例中。