将属性附加到javsacript函数 - 属性在何处链接?

时间:2017-06-08 09:12:05

标签: javascript

请查看以下简单代码的nsnippet: -

function Fis(){
}

Fis.num =20;//no errors
console.log(Fis.num);//prints  20

现在,我知道Fis函数是隐式的(从一开始)通过“Fis.prototype”链接链接到一个对象。

在代码中,Fis.num = 20正在执行而没有任何错误。这个num属性在哪里被链接?

2 个答案:

答案 0 :(得分:0)

您的Fis()函数实际上是您可以为其指定属性的对象。在您的情况下,您将num属性的值20定义为Fis。因此,当您使用Fis将此属性指定给Fis.num=20时,请将其链接起来。因此,您可以按Fis.num获取属性值。

答案 1 :(得分:0)

在JavaScript中,每个函数都是一个对象:



var fn = function () {};
fn.foo = 'bar'; // add property to object
for (var index in fn) {
  // read properties from object
  if (fn.hasOwnProperty(index)) {
    console.log(fn[index]);
  }
}




除此之外,每个函数对象都有一个prototype属性,它本身就是一个对象。以正常方式调用函数时,此prototype属性无效。但是当你使用new调用函数时,JS会创建一个新对象,其原型是函数的prototype属性。然后它用新创建的对象调用该函数并返回它:



var Func = function (baz) {
  console.log(this.foo + baz); // "barabc"
}

Func.prototype.foo = "bar";

var object = new Func("abc");




在这种情况下,该函数也称为类的构造函数,新对象称为此类的实例。

MDN上阅读有关原型链的更多信息。