如果函数是JS中的对象,我们可以在函数内部使用方法吗?如果是这样,怎么称呼他们?

时间:2020-09-06 20:33:55

标签: javascript node.js function object

在此示例中,greet()函数是通过sample.greet()调用的。

let sample = {
    greet() {
        console.log("hi")
    }
}

如果这样定义,如何调用内部greet()函数?

function sample() {
    function greet() {
        console.log("hi")
    }
}

3 个答案:

答案 0 :(得分:2)

在函数体中声明的函数,例如您的示例中的greet()函数:

function sample() {
    function greet() {
        console.log("hi")
    }
}

在函数体内是私有的,不能从sample()函数范围之外调用。您只能从greet()函数体内调用sample(),除非您在运行greet之后以某种方式分配或返回sample(),所以您有意将greet分配给了一些外部变量(在您的示例中不存在)。


函数是对象,因此您可以在这些对象上创建属性,然后可以将函数分配给属性,然后可以对其进行调用:

function sample() {
    console.log("running sample()");
}

sample.greet = function () {
    console.log("hi")
}

sample.greet();

答案 1 :(得分:0)

您可以通过在封闭函数中调用嵌套函数来调用它。这是因为嵌套函数的范围仅限于封闭函数,并且没有其他方法可以从外部调用它。

function sample() {
    function greet() {
        console.log("hi");
    }
    greet();
}

sample()

答案 2 :(得分:0)

您可以为对象分配属性的方式与为对象分配属性的方式相同。您可以将另一个函数分配为这些属性之一,使其像方法一样。

function foo(){
    console.log("foo called");
}

foo.bar = function() {
    console.log("foo.bar called");
}

foo(); // "foo called"
foo.bar(); // "foo.bar called"

您还可以将任何值分配给函数的属性。

foo.x = 1;
console.log(foo.x); // 1

是的,函数是对象,可以将它们像对象一样对待。