Javascript 函数如何具有实例方法?

Javascript 函数如何具有实例方法?,javascript,Javascript,MDN表示具有实例和原型属性(例如,name是Function的实例属性)。所以我可以这样做: function testA() { console.log("testA"); } console.log(testA.name); console.log(Function.name); 但是怎么做呢功能是一种功能。将属性传递到其实例的唯一方法是通过。此关键字将属性保存到其原型,如下所示: function Person(first, last, age, eye) { this.

MDN表示具有实例和原型属性(例如,
name
Function
的实例属性)。所以我可以这样做:

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

console.log(testA.name);
console.log(Function.name);
但是怎么做呢<代码>功能是一种功能。将属性传递到其实例的唯一方法是通过
。此
关键字将属性保存到其
原型
,如下所示:

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

这些实例方法是什么?它们如何可用于
函数
实例,如
testA

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

功能包括:

FunctionDeclaration:functionBindingIdentifier(FormalParameters) {FunctionBody}

  • 如果FunctionDeclaration的函数代码是strict模式代码,则strict为true。否则就让严格成为错误
  • 将名称设为BindingIdentifier的StringValue
  • 设F为FunctionCreate(Normal、FormalParameters、FunctionBody、scope、strict)
  • 执行MakeConstructor(F)
  • 执行SetFunctionName(F,name)。
  • 将F.[SourceText]]设置为FunctionDeclaration匹配的源文本。返回F

  • 将属性传递到其实例的唯一方法是通过。这个关键字将属性保存到其原型中


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

    函数是与任何其他对象一样的对象。对象可以具有属性。因此,函数可以具有属性。其实就是这么简单

    将属性传递到其实例的唯一方法是通过
    。此
    关键字将属性保存到其原型中,如下所示:

    function Person(first, last, age, eye) {
      this.firstName = first;
      this.lastName = last;
      this.age = age;
      this.eyeColor = eye;
    }
    
    否,将属性添加到
    不会将它们添加到函数的原型中。它将它们添加到调用中此引用的任何
    中;在您的示例中,假设您通过
    new
    (或类似方式)调用
    Person
    ,它将是由
    Person
    初始化的对象。它不会是
    Person
    的原型(
    Function.prototype
    ),也不会是
    Person
    prototype
    对象

    函数如何具有实例[属性和方法]

    函数是JavaScript中的对象。真实的,真实的物体。对象可以有属性,其中一些属性可以引用函数——这有效地使它们成为实例方法

    那么为什么
    函数
    测试
    名称
    属性呢?因为说明书上是这么说的。创建函数时:

    function testA() {
        // ...
    }
    
    …规范说它获得了一个
    名称
    属性和一些其他属性(
    长度
    ,在许多情况下是
    原型
    ,等等)。它们是对象的“自有”属性。(对象还继承一些属性,例如
    apply
    call
    。所有这些属性都是引用函数的属性;例如,它们是原型方法。)

    这与规范所说的RegExp对象具有
    lastIndex
    flags
    属性,或者
    Map
    对象具有
    size
    属性没有什么不同:

    const rex=/./g;
    console.log(rex.lastIndex);//0
    console.log(rex.flags);//“g”(在最新的JavaScript引擎上)
    
    console.log(新映射().size);//0
    那么这些实例属性是由JS引擎创建的?好的,但是其他函数对象应该只能访问其原型属性,如何访问它们?为什么其他函数只能访问原型上的属性?如果你有一个对象,你可以访问它的属性。是的,但是为什么这个语句有效:
    console.log(testA.name)如果在这种情况下,它应该只在原型链中查找此属性?在这个statemenet中,您在哪里看到函数、名称或类似的内容?“如果在这种情况下,它应该只在原型链中查找此属性?”-为什么您认为它应该只在原型链中查找?“在这个statemenet中,您在哪里看到函数、名称或类似的内容?”-函数构造函数与它有什么关系?您甚至没有使用构造函数来创建
    funcA
    ,而是使用了一个函数声明。好的,但是这个语句怎么能:
    console.log(testA.name)工作?在这个statemenet中,您在哪里看到
    函数、名称
    或类似的东西?为什么它必须查看原型链?只有当
    testA
    没有
    name
    属性时,它才会查看原型链,但它有。