无法在javascript中将原型函数作为函数声明编写。为什么?

无法在javascript中将原型函数作为函数声明编写。为什么?,javascript,Javascript,为什么我们不能像函数声明那样编写原型函数: 函数表达式中只允许使用它: 函数SinglyLinkedList(){ this.head=null; this.tail=null; } SinglyLinkedList.prototype.add=函数(数据){ 控制台日志(数据); }//按预期工作 函数SinglyLinkedList.prototype.add(数据){ 控制台日志(数据); } //显示错误。,因为语法不是这样设计的。也许它可以这样设计,但事实并非如此。a中的名称(更准确

为什么我们不能像函数声明那样编写原型函数:

函数表达式中只允许使用它:

函数SinglyLinkedList(){
this.head=null;
this.tail=null;
}
SinglyLinkedList.prototype.add=函数(数据){
控制台日志(数据);
}//按预期工作
函数SinglyLinkedList.prototype.add(数据){
控制台日志(数据);
}

//显示错误。
,因为语法不是这样设计的。也许它可以这样设计,但事实并非如此。a中的名称(更准确地说,绑定标识符)必须与的定义匹配,这意味着它不能是类似于
SinglyLinkedList.prototype.add
的属性路径

请注意,如果要查找较短的对象,可以使用
Object.assign
(新的,但可多填充)和使用方法语法的对象初始值设定项(从ES2015起新增):

或者对于ES2015之前的环境(使用polyfill表示
对象.分配
),属性语法而非方法语法:

Object.assign(SinglyLinkedList.prototype, {
    add: function(data) {
        console.log(data);
    },
    remove: function(/*...*/) {
        // ...
    }
    // etc.
});

当然,ES2015+有
,这也比旧方法更简洁。

因为这不是语法的设计方式。也许它可以这样设计,但事实并非如此。a中的名称(更准确地说,绑定标识符)必须与的定义匹配,这意味着它不能是类似于
SinglyLinkedList.prototype.add
的属性路径

请注意,如果要查找较短的对象,可以使用
Object.assign
(新的,但可多填充)和使用方法语法的对象初始值设定项(从ES2015起新增):

或者对于ES2015之前的环境(使用polyfill表示
对象.分配
),属性语法而非方法语法:

Object.assign(SinglyLinkedList.prototype, {
    add: function(data) {
        console.log(data);
    },
    remove: function(/*...*/) {
        // ...
    }
    // etc.
});

当然,ES2015+有
,这也比旧方法更简洁。

第二种方法在JS中语法无效

将命名函数分配给原型的一种可能方法:

function add(data) {
    ...
}

SinglyLinkedList.prototype.add = add;

第二种方法在JS中语法无效

将命名函数分配给原型的一种可能方法:

function add(data) {
    ...
}

SinglyLinkedList.prototype.add = add;

函数
关键字之后,您可以编写函数名。函数名必须符合有效的命名约定<代码>在函数名中无效,使语法无效


function
关键字不是为在嵌套对象上创建函数而设计的。它唯一的任务是创建一个函数,它不关心你以后把它放在哪里。

函数
关键字之后,你可以写一个函数名。函数名必须符合有效的命名约定<代码>在函数名中无效,使语法无效


function
关键字不是为在嵌套对象上创建函数而设计的。它唯一的任务是创建一个函数,它不关心你以后把它放在哪里。

函数表达式中允许什么,你能举个例子吗。?更新了代码
SinglyLinkedList.prototype.add=
这不是创建函数,这是->
函数(数据){
函数表达式中允许的内容,您能举个例子吗。?更新了代码
SingleyLinkedList.prototype.add=
这不是创建函数,这是->
函数(数据){