Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript向函数添加属性_Javascript_Function - Fatal编程技术网

javascript向函数添加属性

javascript向函数添加属性,javascript,function,Javascript,Function,假设我们有一个函数 function Rabbit(){ console.log("shiv"); } 现在,无需创建此函数的对象,我就可以指定此对象的属性 Rabbit.bark = function(line) { console.log("name is", line); }; 这意味着什么。这样做可以为函数添加一个变量。或者,即使我没有使用new操作符创建对象,也会向Rabbit对象添加属性 这意味着什么。这样做可以为函数添加一个变量。或者 这为Rabbit对象添加了一个属性

假设我们有一个函数

function Rabbit(){
  console.log("shiv");
}
现在,无需创建此函数的对象,我就可以指定此对象的属性

Rabbit.bark = function(line) {
 console.log("name is", line);
};
这意味着什么。这样做可以为函数添加一个变量。或者,即使我没有使用
new
操作符创建对象,也会向
Rabbit
对象添加属性

这意味着什么。这样做可以为函数添加一个变量。或者 这为Rabbit对象添加了一个属性

是否向函数中添加一个变量-No

或者在兔子对象中添加属性-Yes

树皮是类型对象的属性

即使我没有使用新操作符创建对象


Rabit已经是(类型)的对象。您不是在创建此对象的实例,只是在向其添加属性。

JavaScript中的函数只是一个对象,称为对象

和任何其他类型的对象一样,它有自己的构造函数(
新函数(…)
),方法(
应用
绑定
调用
…)和属性(
参数
调用方
名称
…)

您可能熟悉创建这样的函数:

function Rabbit() {
    console.log('shiv');
}
var Rabbit = new Function('console.log("shiv")');
然后您应该知道,您还可以创建如下函数:

function Rabbit() {
    console.log('shiv');
}
var Rabbit = new Function('console.log("shiv")');
现在,你可能猜出来了。如果向函数对象添加新属性,只要不覆盖现有属性,函数仍能正常工作

是否向函数添加一个变量

  • 不,函数有自己的闭包,向函数添加变量的唯一方法是使用
    Rabbit.bind(object)
执行此操作会将属性添加到兔子对象

  • 嗯,既然“兔子对象”只是一个对象,是的

函数是对象,
bark
是对象的属性<但是,code>bark并不是一种传统的方法,但是如果您将
new
prototype
添加到混合中,那么
bark
将是一种实例方法。实际上,如果您只是简单地向上面的代码添加
新的
,那么
.bark
与任何实例都没有联系,但是您可以将
bark
作为一个静态方法,比如
Array.isArray()
将函数看作一个对象,类似于
{name:“Rabbit”,长度:0,主体:“code here”,参数:[],这:{},_closures:{},call:function call()…}
如果您愿意,您可以自己添加新属性。所以我可以说,当我调用函数例如console.log(rabbit())时,我正在调用该对象的某些特定属性是的,基本上函数的
.call()
方法就是您调用它的方式。够近了。书呆子,你可以在你实际调用/使用的规范中阅读函数内部隐藏的属性,而不是userland端点(实例方法)Hi@shivgarg,如果你认为我的答案有帮助,你可以将它标记为可接受的答案,帮助其他人快速找到它。谢谢。我看不出显示
新函数
案例的目的。@torazaburo只是想强调
兔子
只是一个由
新函数
创建的对象。我编辑了该示例,使其与问题更具语义关联。如果我创建兔子的实例,我将无法访问属性“树皮”。有什么问题……有人能解释一下吗?函数Rabbit(){console.log(“shiv”);}Rabbit.bark=函数(行){console.log(“name is”,行);};var m=新兔子();m、 树皮(“试验”);VM135:1未捕获类型错误:m.bark不是1:3处的函数