Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.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 - Fatal编程技术网

Javascript 向函数对象添加新属性

Javascript 向函数对象添加新属性,javascript,Javascript,我试图理解以下模式: // https://github.com/twitter/bootstrap/blob/master/js/bootstrap-collapse.js $.fn.collapse = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('collapse') , options = ty

我试图理解以下模式:

// https://github.com/twitter/bootstrap/blob/master/js/bootstrap-collapse.js

  $.fn.collapse = function (option) {
    return this.each(function () {
      var $this = $(this)
        , data = $this.data('collapse')
        , options = typeof option == 'object' && option
      if (!data) $this.data('collapse', (data = new Collapse(this, options)))
      if (typeof option == 'string') data[option]()
    })
  }

  $.fn.collapse.defaults = {
    toggle: true
  }
看起来,
collapse
是一个函数对象。那么,为什么可以将
默认值
作为属性添加到
折叠

以下内容尝试向函数对象添加新属性,但无效。这是什么

var my_object = function () {
    alert('Hello World!');
};
my_object.name = 'my_object';

console.log(my_object.name);  // prints an empty string
是的,它是一个函数对象。javascript中的所有对象都可以有属性,因此
$.fn.collapse
具有
默认值


由于每个函数[对象]都有一个包含函数名的不可写函数(如果已命名的话),因此小提琴无法工作。您正在为名为空的
my\u对象
变量分配一个匿名函数。请注意,它是一个字符串,而不是
未定义的
!请看一下

。名称
很特殊,大多数其他属性名称都适用:

var my_object = function () {
    alert('Hello World!');
};
my_object.someprop = 'my_object';
console.log(my_object.someprop);  // prints an empty string
保留函数的
名称
属性

function foo() {};
console.log(foo.name); // "foo"
在您的情况下,它是一个空字符串,因为它被声明为匿名函数:

var foo = function() {};
console.log(foo.name); // ""

但是除了一些保留的属性名之外,您可以像分配任何对象一样分配函数的属性。这可能非常强大,因为它可以让您以非常干净的方式将数据与需要该数据的代码进行排序。

name
是函数实例的保留属性,具有不可配置和不可写的标志,您无法覆盖它。除此之外,函数也继承自对象,并且可能具有属性

var my_fnc = function() { };

my_fnc.foobar = 42;

console.log( my_fnc_foobar ); // 42

谢谢你的回答。当大多数都很好的时候,选择最好的有点难+1对于未被接受的答案。啊,现在我知道
var my_object=function(){…}
var my_object=function my_object(){…}
不同,后者在某种程度上具有
my_object.name
设置,即不是空字符串。是的。你可能想读一读谢谢(+1)!有没有办法调查哪些属性具有特殊标志?我的意思是,我在哪里可以找到不可配置或不可写的标志?您可以使用检查它们,谢谢!有没有办法调查哪些属性具有特殊标志?我的意思是,哪里可以找到不可配置或不可写的标志?