资讯专栏INFORMATION COLUMN

[知识盲点] 为function添加值为function的属性

Rango / 904人阅读

摘要:理论上来说,里是对象,给对象添加属性是可以的。很明显,这就是在或者函数上加了一个属性,属性值是函数,作用是截取前后空格。要习惯的把中的一切看作对象,只要是对象,就是属性的集合,属性是键值对的形式。

今天在某个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://www.ucloud.cn/yun/85802.html

相关文章

  • 2019秋招知识盲点总结

    摘要:实际上是一个让出线程的标志遇到会立即返回一个状态的。一个简单的防抖函数如果定时器存在则清除重新开始定时执行缺点只能在最后执行,不能立即被执行,在某些情况下不适用。假设压入栈的所有数字均不相等。接收数据不受同源政策限制。 开始 尽管秋招还没有拿到offer(好难过),但是一些知识点还是要总结的,既然自己选了这条路,那就一定要坚定不移的走下去...... 注意 new 运算符的优先级 fu...

    Doyle 评论0 收藏0
  • 面试官问:JSthis指向

    摘要:之前写过一篇文章面试官问能否模拟实现的和方法就是利用对象上的函数指向这个对象,来模拟实现和的。虽然实际使用时不会显示返回,但面试官会问到。非严格模式下,和,指向全局对象 前言 面试官出很多考题,基本都会变着方式来考察this指向,看候选人对JS基础知识是否扎实。读者可以先拉到底部看总结,再谷歌(或各技术平台)搜索几篇类似文章,看笔者写的文章和别人有什么不同(欢迎在评论区评论不同之处),...

    warnerwu 评论0 收藏0
  • Deep in JS - 收藏集 - 掘金

    摘要:今天同学去面试,做了两道面试题全部做错了,发过来给道典型的面试题前端掘金在界中,开发人员的需求量一直居高不下。 排序算法 -- JavaScript 标准参考教程(alpha) - 前端 - 掘金来自《JavaScript 标准参考教程(alpha)》,by 阮一峰 目录 冒泡排序 简介 算法实现 选择排序 简介 算法实现 ... 图例详解那道 setTimeout 与循环闭包的经典面...

    enali 评论0 收藏0
  • 继承实现方式及原型概述 | JavaScript 随笔

    摘要:每一个对象直接量都是的子类,即构造函数中的构造函数与普通函数并没有什么两样,只不过在调用时,前面加上了关键字,就当成是构造函数了。由于没有传入变量,在调用的构造函数时,会出错这个问题可以通过一个空对象来解决改自。 showImg(https://segmentfault.com/img/bVmNZj); 对于 OO 语言,有一句话叫Everything is object,虽然 Ja...

    chenjiang3 评论0 收藏0
  • css3 制作圆环进度条

    摘要:引子移动端做一个加载的图标,跟以往沿用的都不太一样,是一个圆环进度条,圆环进度条也就罢了,还得能用百分比控制。 引子 移动端做一个 loadiing 加载的图标,跟以往沿用的都不太一样,是一个圆环进度条,圆环进度条也就罢了,还得能用百分比控制。 CSS3 实现圆环 demo 刚开始写这个圆环的时候是参照帖子上给出的css代码代入,然后根据自己的需求改,发现圆环可以完美转动了,但是好像没...

    xingpingz 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<