如下两段代码,分别是使用对象字面量和构造函数创建对象

代码段1:

var a={"name":"nihao"};console.log(a);

代码段2:

var a=function(name){this.name=name;};var b= new a("nihao");console.log(b); //a { name: 'nihao' }

问题1:这两种方式生成的对象的区别是什么呢?
问题2:函数对象存在的意义是什么?

要理解这个知识点,首先你要知道:

  • 函数对象的原型是对象(原型链为:实例,通过new构造函数–>函数对象–>对象–>null)
  • 函数有prototype属性,而对象没有因此,特别设计出了函数对象,方便对原型进行扩展

看下面代码也许可以帮你理解:

var a = function (name) {this.name = name;
};a.prototype.sex = "nan";var b = new a("nihao");console.log(typeof b); //object
console.log(b); // a { name: 'nihao' }
console.log(b.name);  // nihao
console.log(b.sex);   //nan

如上,查看console.log(b);打印的内容可以看到,对象b的原型是一个函数对象,它里面包含了在原型上扩展的属性sex总结就是:函数对象可以被继承,而普通对象无法被继承。

函数对象是一个对象,用来存放函数通过prototype扩展的属性和方法,可以被继承(构造函数实例化后生成的对象的原型就是函数对象)。

ps: 一般我们不使用__proto__属性对对象的原型链进行扩展,
它可能导致一些意想不到的问题,如下,使用__proto__对对象扩展,
我们取到的值tetst和预期的值hahah不一样

var obj = {name: 'tetst'
};obj.__proto__.name = 'hahah';
obj.__proto__.sex = 'nan';console.log(obj.name);  //tetst
console.log(obj.sex);   //nan

对象和函数对象有什么区别?相关推荐

  1. 【C++】什么是函数对象和函数对象的用处

    目录 什么是函数对象 函数对象的用处 什么是函数对象 class myprint {public:void operator()(int num){cout << "num &q ...

  2. 函数对象、 函数对象与容器、函数对象与算法

    一.函数对象 1.函数对象(function object)也称为仿函数(functor) 2.一个行为类似函数的对象,它可以没有参数,也可以带有若干参数. 3.任何重载了调用运算符operator( ...

  3. python 返回函数对象_Python—函数对象与闭包

    一 函数对象 函数对象指的是函数可以被当做"数据"来处理,具体可以分为四个方面的使用. 1.1 函数可以被引用 def index(): print('from index') a ...

  4. 函数对象 java_函数对象

    函数对象 * 一种将函数作为参数传递的独创方法 是注意到 在我们想传递的参数 即包含数据 也保包含方法,于是我们可以定义一个 * 不包含数据 只 包含方法的类,并传递该类的一个实例,事实上,一个函数通 ...

  5. 从零开始学C++之STL(八):函数对象、 函数对象与容器、函数对象与算法

    http://blog.csdn.net/jnu_simba/article/details/9500219 一.函数对象 1.函数对象(function object)也称为仿函数(functor) ...

  6. Python学习笔记7:函数对象及函数对象作參数

    一.lambda函数 比如: fun1 = lambda x,y: x + y print fun1(3,4) 输出:7 lambda生成一个函数对象.该函数參数为x,y,返回值为x+y.函数对象赋给 ...

  7. python函数装饰函数_Python精进-装饰器与函数对象

    本文为<爬着学Python>系列第四篇文章. 从本篇开始,本专栏在顺序更新的基础上,会有不规则的更新. 在Python的学习与运用中,我们迟早会遇到装饰器,这个概念对于初识装饰器的新手来说 ...

  8. python装饰器函数-Python精进-装饰器与函数对象

    本文为<爬着学Python>系列第四篇文章. 从本篇开始,本专栏在顺序更新的基础上,会有不规则的更新. 在Python的学习与运用中,我们迟早会遇到装饰器,这个概念对于初识装饰器的新手来说 ...

  9. Python陷阱:为什么不能用可变对象作为函数的默认参数值

    先来看一道题目: >>> def func(numbers=[], num=1): ...     numbers.append(num) ...     return number ...

最新文章

  1. 平年闰年c语言源代码,C语言平年闰年问题
  2. AI又进阶!除了鉴别PS图片,还能一键卸妆
  3. 89页PPT揭秘:人工智能产业爆发的拐点
  4. MySQL MHA: 一种master高可用的主从复制解决方案
  5. 【响应式Web前端设计】Bootstrap入门Demo(导航栏)
  6. MySQL --- 计算指定日期为当月的第几周
  7. 目录指南中的Python列表文件-listdir VS system(“ ls”)通过示例进行解释
  8. Win10系统添加 Win10 LTSC2019闹钟
  9. use redis instance in docker hub
  10. oracle 11g rac impdp,RAC创建DBlink并使用impdp抽取源库数据
  11. hashmap-put方法过程
  12. 关于Bandicam使用心得
  13. MapReduce计算PMI
  14. python zip压缩文件
  15. 9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路
  16. 5.验证面试高频问题整理(附答案)
  17. 异步加载loading
  18. wps交叉表_使用WPS图表功能中的堆叠条形图制作日程交叉图
  19. G-sensor概述及常用芯片整理(转)
  20. AutodeskADN 微信公众号和我个人邮箱

热门文章

  1. 影响世界的儿童冒险动画:《丁丁历险记》 The Adventure of Tintin
  2. WebShell -- Linux反弹
  3. fedora26安装flash插件、搜狗拼音、Mysql
  4. 【视频】视频存储技术
  5. 这意味着您在wp-config.php文件中指定的用户名和密码信息不正确
  6. 浙江外国语学校计算机行不行,浙江外国语学院怎么样
  7. osg 瞄准镜 车窗镜 透视镜片 做法
  8. 【CloudXNS教您几招】如何让多ip域名配置游刃有余?(1)
  9. 使用BUCK芯片输出翻转负电压
  10. VASP学习1入门知识