javascript中函数与函数的关系

javascript中函数与函数的关系,javascript,prototype,Javascript,Prototype,我想了解javascript中函数和函数之间的关系 让我举个例子: Function.prototype.bind // function () { [native code] } var foo = function () {}; foo.bind; //function () { [native code] } 我的问题是 Function.prototype.bind和foo.bind指的是相同的代码? 如果是,有人能解释一下这种关系吗?是的,任何函数(){}的原型总是指向函数原型。一

我想了解javascript中函数和函数之间的关系

让我举个例子:

Function.prototype.bind // function () { [native code] }

var foo = function () {};
foo.bind; //function () { [native code] }
我的问题是
Function.prototype.bind
foo.bind
指的是相同的代码?

如果是,有人能解释一下这种关系吗?

是的,任何
函数(){}
的原型总是指向
函数
原型。一个简单的方法是使用深度相等进行检查:

var foo = function () {};
foo.bind === Function.prototype.bind // -> true
> (function(){} === function(){})
false
> ((""+function(){}) === (""+function(){}))
true    
实际上,您可以使用
new
操作符创建函数实例,并传递正文和参数(尽管不建议这样做):


是的,任何
函数(){}
的原型总是指向
函数
原型。一个简单的方法是使用深度相等进行检查:

var foo = function () {};
foo.bind === Function.prototype.bind // -> true
> (function(){} === function(){})
false
> ((""+function(){}) === (""+function(){}))
true    
实际上,您可以使用
new
操作符创建函数实例,并传递正文和参数(尽管不建议这样做):

是的,看看:

> (function (){}).bind === Function.prototype.bind
true
为了证明这不仅仅是字符串相等:

var foo = function () {};
foo.bind === Function.prototype.bind // -> true
> (function(){} === function(){})
false
> ((""+function(){}) === (""+function(){}))
true    
这是因为任何函数的内部
[[Prototype]]
字段(可以通过
\uuuu proto\uuuu
在Google Chrome中访问)将始终是
函数。Prototype

> Function.prototype
function Empty() {}
> (function (){}).__proto__
function Empty() {}
> Function.prototype === (function (){}).__proto__
true
如果在对象中查找了给定名称的字段,但未找到该字段,则将遵循原型继承链,直到找到具有该字段的对象为止。在这种情况下,我们的函数没有
bind
属性,因此
bind
取自原型:

> (function (){}).__proto__.bind
function bind() { [native code] }
是的,看看:

> (function (){}).bind === Function.prototype.bind
true
为了证明这不仅仅是字符串相等:

var foo = function () {};
foo.bind === Function.prototype.bind // -> true
> (function(){} === function(){})
false
> ((""+function(){}) === (""+function(){}))
true    
这是因为任何函数的内部
[[Prototype]]
字段(可以通过
\uuuu proto\uuuu
在Google Chrome中访问)将始终是
函数。Prototype

> Function.prototype
function Empty() {}
> (function (){}).__proto__
function Empty() {}
> Function.prototype === (function (){}).__proto__
true
如果在对象中查找了给定名称的字段,但未找到该字段,则将遵循原型继承链,直到找到具有该字段的对象为止。在这种情况下,我们的函数没有
bind
属性,因此
bind
取自原型:

> (function (){}).__proto__.bind
function bind() { [native code] }
所有JavaScript(如
foo
)都是的实例,并继承自
函数.prototype
。您可以轻松地检查它:

> (function foo(){…}) instanceof Function
true
> (function foo(){…}).bind === Function.prototype.bind
true
所有JavaScript(如
foo
)都是的实例,并继承自
函数.prototype
。您可以轻松地检查它:

> (function foo(){…}) instanceof Function
true
> (function foo(){…}).bind === Function.prototype.bind
true
Function.prototype.bind和foo.bind引用相同的代码

绝对是!您可能会遇到一个短语,比如JavaScript是函数式语言,或者在JS中,函数是第一类对象。这意味着属性和方法的逻辑适用于函数,就像它们适用于任何对象(数组、日期、对象等)
函数
包含定义所有函数具有的所有基本属性和方法的原型。与其为每个函数指定新的函数对象,不如将它们指定给一个所有函数对象都指向的对象,这样效率更高

这意味着,正如其他人在这里指出的那样:

function foo()
{};
foo.bind === Function.prototype.bind;
但这也意味着您可以同时增强原型和单个函数对象:

Function.prototype.getName = function()
{
    return this.name;
}
foo.getName();//foo
同样,这里
foo.getName===Function.prototype.getName
,但一旦我们直接分配给单个函数对象:

foo.getName = function(){ return 'bar';};
显然,
foo.getName!==Function.prototype.getName
。。。只需使用函数原型,以及它如何单独影响每个函数的行为。这很有趣;P

Function.prototype.bind和foo.bind引用相同的代码

绝对是!您可能会遇到一个短语,比如JavaScript是函数式语言,或者在JS中,函数是第一类对象。这意味着属性和方法的逻辑适用于函数,就像它们适用于任何对象(数组、日期、对象等)
函数
包含定义所有函数具有的所有基本属性和方法的原型。与其为每个函数指定新的函数对象,不如将它们指定给一个所有函数对象都指向的对象,这样效率更高

这意味着,正如其他人在这里指出的那样:

function foo()
{};
foo.bind === Function.prototype.bind;
但这也意味着您可以同时增强原型和单个函数对象:

Function.prototype.getName = function()
{
    return this.name;
}
foo.getName();//foo
同样,这里
foo.getName===Function.prototype.getName
,但一旦我们直接分配给单个函数对象:

foo.getName = function(){ return 'bar';};

显然,
foo.getName!==Function.prototype.getName
。。。只需使用函数原型,以及它如何单独影响每个函数的行为。这很有趣;P

也许你,就像几周前的我一样,想知道在这个函数中添加一个函数(在外部函数中)和通过prototype关键字添加它之间的区别。关键的区别在于,后者只向原型对象添加一次,而第一个(在这里,您将新函数分配给它并返回它)在每次创建函数(对象)的新实例时添加


我发现这篇文章非常好:

也许你,就像几周前的我一样,想知道在这个函数中添加一个函数(在外部函数中)和通过prototype关键字添加它之间的区别。关键的区别在于,后者只向原型对象添加一次,而第一个(在这里,您将新函数分配给它并返回它)在每次创建函数(对象)的新实例时添加


我发现这篇文章非常好:

我认为这更多的是一个关于继承的问题,而不是这个特殊情况所带来的问题。我认为这更多的是一个关于继承的问题,而不是这个特殊情况所带来的问题。你证明函数不作为字符串进行比较是很难理解的。此外,你应该在那之后纠正一些文本中的错误。我的证据是我有一个错误