对象和函数对象有什么区别?
如下两段代码,分别是使用对象字面量和构造函数创建对象。
代码段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
对象和函数对象有什么区别?相关推荐
- 【C++】什么是函数对象和函数对象的用处
目录 什么是函数对象 函数对象的用处 什么是函数对象 class myprint {public:void operator()(int num){cout << "num &q ...
- 函数对象、 函数对象与容器、函数对象与算法
一.函数对象 1.函数对象(function object)也称为仿函数(functor) 2.一个行为类似函数的对象,它可以没有参数,也可以带有若干参数. 3.任何重载了调用运算符operator( ...
- python 返回函数对象_Python—函数对象与闭包
一 函数对象 函数对象指的是函数可以被当做"数据"来处理,具体可以分为四个方面的使用. 1.1 函数可以被引用 def index(): print('from index') a ...
- 函数对象 java_函数对象
函数对象 * 一种将函数作为参数传递的独创方法 是注意到 在我们想传递的参数 即包含数据 也保包含方法,于是我们可以定义一个 * 不包含数据 只 包含方法的类,并传递该类的一个实例,事实上,一个函数通 ...
- 从零开始学C++之STL(八):函数对象、 函数对象与容器、函数对象与算法
http://blog.csdn.net/jnu_simba/article/details/9500219 一.函数对象 1.函数对象(function object)也称为仿函数(functor) ...
- Python学习笔记7:函数对象及函数对象作參数
一.lambda函数 比如: fun1 = lambda x,y: x + y print fun1(3,4) 输出:7 lambda生成一个函数对象.该函数參数为x,y,返回值为x+y.函数对象赋给 ...
- python函数装饰函数_Python精进-装饰器与函数对象
本文为<爬着学Python>系列第四篇文章. 从本篇开始,本专栏在顺序更新的基础上,会有不规则的更新. 在Python的学习与运用中,我们迟早会遇到装饰器,这个概念对于初识装饰器的新手来说 ...
- python装饰器函数-Python精进-装饰器与函数对象
本文为<爬着学Python>系列第四篇文章. 从本篇开始,本专栏在顺序更新的基础上,会有不规则的更新. 在Python的学习与运用中,我们迟早会遇到装饰器,这个概念对于初识装饰器的新手来说 ...
- Python陷阱:为什么不能用可变对象作为函数的默认参数值
先来看一道题目: >>> def func(numbers=[], num=1): ... numbers.append(num) ... return number ...
最新文章
- 平年闰年c语言源代码,C语言平年闰年问题
- AI又进阶!除了鉴别PS图片,还能一键卸妆
- 89页PPT揭秘:人工智能产业爆发的拐点
- MySQL MHA: 一种master高可用的主从复制解决方案
- 【响应式Web前端设计】Bootstrap入门Demo(导航栏)
- MySQL --- 计算指定日期为当月的第几周
- 目录指南中的Python列表文件-listdir VS system(“ ls”)通过示例进行解释
- Win10系统添加 Win10 LTSC2019闹钟
- use redis instance in docker hub
- oracle 11g rac impdp,RAC创建DBlink并使用impdp抽取源库数据
- hashmap-put方法过程
- 关于Bandicam使用心得
- MapReduce计算PMI
- python zip压缩文件
- 9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路
- 5.验证面试高频问题整理(附答案)
- 异步加载loading
- wps交叉表_使用WPS图表功能中的堆叠条形图制作日程交叉图
- G-sensor概述及常用芯片整理(转)
- AutodeskADN 微信公众号和我个人邮箱