首页 > 解决方案 > Function 怎么会有实例方法呢?

问题描述

MDN 说Function 对象具有实例和原型属性(例如name是 的实例属性Function)。所以我可以这样做:

function testA()
{
    console.log("testA");
}

console.log(testA.name);
console.log(Function.name);

但是怎么做?Function是一个对象构造函数。将属性传递给它的实例的唯一方法是通过.this将它们保存到它的关键字prototype,如下所示:

function Person(first, last, age, eye) {
  this.firstName = first;
  this.lastName = last;
  this.age = age;
  this.eyeColor = eye;
}

这些实例方法是什么,它们如何可用于Function像这样的实例testA

标签: javascript

解决方案


方法是值是函数的属性。因为name是字符串,所以它不是方法。

函数具有设置名称的明确规则

FunctionDeclaration : 函数BindingIdentifier (FormalParameters) {FunctionBody}

  1. 如果 FunctionDeclaration 的函数代码是严格模式代码,则让 strict 为真。否则让 strict 为假。
  2. 让名称为 BindingIdentifier 的 StringValue
  3. 令 F 为 FunctionCreate(Normal, FormalParameters, FunctionBody, scope, strict)。
  4. 执行 MakeConstructor(F)。
  5. 执行 SetFunctionName(F, name)。
  6. 将 F.[[SourceText]] 设置为与 FunctionDeclaration 匹配的源文本。返回 F。

将属性传递给其实例的唯一方法是通过 .this 关键字将它们保存到其原型

No.this是指由构造函数创建的对象,而不是其原型。


推荐阅读