Javascript 将函数和属性附加到对象的用例

Javascript 将函数和属性附加到对象的用例,javascript,Javascript,在将函数和属性附加到对象时,会有什么样的用例?我还没有在生产中看到这种情况。这被认为是不好的做法吗 例如: var actor = function() { console.log('I\'ll be back!'); } actor.name = 'Arnold Schwarzenegger'; 函数从对象继承函数。名称是引用函数名称的特殊属性。对于匿名函数,您可以将name属性更改为您想要的任何属性 更改.name是否是一种良好的做法? 我会说,不。更改.name属性除了让事情变

在将函数和属性附加到对象时,会有什么样的用例?我还没有在生产中看到这种情况。这被认为是不好的做法吗

例如:

var actor = function() {
    console.log('I\'ll be back!');
}

actor.name = 'Arnold Schwarzenegger';

函数从对象继承<代码>函数。名称是引用函数名称的特殊属性。对于匿名函数,您可以将
name
属性更改为您想要的任何属性

更改
.name
是否是一种良好的做法? 我会说,不。更改
.name
属性除了让事情变得更加混乱之外,没有任何其他效果

你的问题 将函数和属性附加到对象

这不是您的代码所做的
actor
是一个函数,也是一个对象。除了
null
之外,您始终可以向任何对象添加属性。事实上,
Function.prototype
已经附带了许多ES6中定义的方法(属性)

向函数实例添加属性 一般来说,向函数实例添加属性不是一个坏的做法。从创建静态方法到jQuery(例如,
$.get
),这种做法随处可见:


它是该语言的一项功能,如果符合您的目的,您一定要使用它。

function.property=x
只在函数的对象上存储属性值。当您想用特定于函数的附加变量“标记”函数时,它会很有用。与使用常规变量(如
var name
)不同,使用
actor.name
更具可读性,并在函数下限定变量的范围。不,这不是一个坏习惯(以我的拙见)。这实际上是相当基本的东西。对象具有方法和属性。看看jQuery的源代码,它使用了函数的这种“双重性质”。也就是说,
$
实际上被定义为一个函数,而不是一个对象,仍然有很多属性和方法。脚本实际上不起作用,您在尝试设置时应该会出错。使用严格模式!当您说这不是一个好的做法时,您具体指的是
.name
属性,对吗?是的。在我看来,更改函数实例的name属性通常不是一个好的做法。我同意,我只是不确定OP是否想问一个关于函数对象属性的一般性问题,而只是选择了一个非常糟糕的方法example@Bergi澄清了我的答案。
function Person(name){
    this.name = name;
}

Person.clone = function(p){
    return new Person(p.name);
};

var p1 = new Person("Alex"),
    p2 = Person.clone(p1);       // clone p1