[学问盲点] 为function添加值为function的属性

本日在某个js交换群里看到如许一个题目:

亲们,假如我定义一个function A() { } 能够给这个函数增加一个要领吗?比方:A.use = function() { }

我回答说“能够,js里function 是对象”,但再往深一点想,对这个题目还真有点隐约,坚决考证一下~

先说下答案:这类写法是能够的

理论上来讲,js里function是对象,给对象增加属性是能够的。但如许的函数实行是如何的呢?两个函数有什么联络呢?

javascriptfunction A() {
    console.log('I am A');
}

A.use = function () {
    console.log('123');
};

A(); // I am A
A.use(); // 123

运转效果可知,这两个函数在运转的时刻并没有什么互相的影响,也表现了函数名就是个援用,AA.use 是两个差别的援用,运转的时刻指向差别的内存地区,所以没有影响。

上面的代码改成:

javascriptvar A = function() {
    console.log('I am A');
}

A.use = function () {
    console.log('123');
};

A(); // I am A
A.use(); // 123

用函数表达式来定义A( ),如许是否是就显著多了,或许说习气多了

上面的效果表明两个函数运转时互不影响,然则真的一点关联都没有吗?想起头几天总结的this,就猎奇地考证了下这两个函数的this是什么。

javascriptfunction A() {
    console.log(this);
}

A.use = function () {
    console.log(this);
};

A(); // Window
A.use(); // function A()

A.use()中的this是function A(),这也相符this的运用划定规矩“

函数作为对象的要领调用时,this指向这个对象。

只不过在这里,这个对象是个函数罢了。

我在写《JavaScript原型》内里摘抄过下面这段:

在jQuery源码中,“jQuery”或许“$”,这个变量实际上是一个函数,能够用 typeof 考证一下。

console.log(typeof $);  // function
console.log($.trim(" ABC ")); // ABC

验明正身!“$”的确是个函数。而常常运用的 $.trim() 也是个函数。

很显著,这就是在 $ 或许 jQuery 函数上加了一个 trim 属性,属性值是函数,作用是截取前后空格。

要习气的把js中的统统看做对象,只如果对象,就是属性的鸠合,属性是键值对的情势。

当时只是记住了能够如许写,本日算是真的邃晓了 :)

    原文作者:梦禅
    原文地址: https://segmentfault.com/a/1190000002977944
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞