javascript中的Function与Object,function与object
2015-11-23 22:33
501 查看
function与object是数据类型,Function与Object是两个函数对象的标识符(等价于两个函数对象),Function与Object的数据类型都是function.
首先我们看下面的例子(typeof 表示数据类型,instanceof表示实例类型---用原型链查找):
var a = function(){};
var b = {};
var c = 1;
var d;
var e = null;
var f = false;
var g = "";
console.log( typeof a);//function
console.log( a instanceof Function);//true
console.log( a instanceof Object);//true
console.log( typeof b);//object
console.log( b instanceof Function);//true
console.log( b instanceof Object);//true
console.log( typeof c);//number
console.log( c instanceof Function);//false
console.log( c instanceof Object);//false
console.log( typeof d);//undefined
console.log( d instanceof Function);//false
console.log( d instanceof Object);//false
console.log( typeof e);//object
console.log( e instanceof Function);//false
console.log( e instanceof Object);//false
console.log( typeof f);//boolean
console.log( f instanceof Function);//false
console.log( f instanceof Object);//false
console.log( typeof g);//string
console.log( g instanceof Function);//false
console.log( g instanceof Object);//false
javastcript中六种数据类型number,string,boolean,undefined,object,function.注意null是不属于数据类型,null只表示数据值,null的数据类型是object,由此number,string,boolean,undefined为值类型,object,function为引用类型.然后object和Object,function和Function表示的意义是不同的,小写的是数据类型,大写的是函数标识对象.数据类型为object的数据对象(除了null)外其实例类型是Object,而数据类型为function的实例类型既是Function,也是Object,原因在于Function.prototype.__proto__ == Object.prototype,所以所有的object和funtion数据类型的数据对象的实例类型都是Object.因为实例类型是按原型链查找的.
看下面的例子:
console.log(typeof Object);//function
console.log(typeof Function);//function
console.log( Object instanceof Function);//true
console.log( Function instanceof Object);//true
console.log( Object.__proto__ == Function.prototype);//true
console.log( Function.__proto__ == Function.prototype);//true
console.log( Function.prototype.__proto__ == Object.prototype);//true
关键在这一步: Function.prototype.__proto__ == Object.prototype
数据类型为object的数据对象,内置__proto__对象
而数据类型为function的数据对象(函数),内置__proto_外,还有scope,prototype,length等对象
关键在于object类型的只有声明创建时,而function类型的除了声明创建时,还有函数运行时
var Fn = function(){};//这是函数声明时
Fn();//这是函数运行时.
首先我们看下面的例子(typeof 表示数据类型,instanceof表示实例类型---用原型链查找):
var a = function(){};
var b = {};
var c = 1;
var d;
var e = null;
var f = false;
var g = "";
console.log( typeof a);//function
console.log( a instanceof Function);//true
console.log( a instanceof Object);//true
console.log( typeof b);//object
console.log( b instanceof Function);//true
console.log( b instanceof Object);//true
console.log( typeof c);//number
console.log( c instanceof Function);//false
console.log( c instanceof Object);//false
console.log( typeof d);//undefined
console.log( d instanceof Function);//false
console.log( d instanceof Object);//false
console.log( typeof e);//object
console.log( e instanceof Function);//false
console.log( e instanceof Object);//false
console.log( typeof f);//boolean
console.log( f instanceof Function);//false
console.log( f instanceof Object);//false
console.log( typeof g);//string
console.log( g instanceof Function);//false
console.log( g instanceof Object);//false
javastcript中六种数据类型number,string,boolean,undefined,object,function.注意null是不属于数据类型,null只表示数据值,null的数据类型是object,由此number,string,boolean,undefined为值类型,object,function为引用类型.然后object和Object,function和Function表示的意义是不同的,小写的是数据类型,大写的是函数标识对象.数据类型为object的数据对象(除了null)外其实例类型是Object,而数据类型为function的实例类型既是Function,也是Object,原因在于Function.prototype.__proto__ == Object.prototype,所以所有的object和funtion数据类型的数据对象的实例类型都是Object.因为实例类型是按原型链查找的.
看下面的例子:
console.log(typeof Object);//function
console.log(typeof Function);//function
console.log( Object instanceof Function);//true
console.log( Function instanceof Object);//true
console.log( Object.__proto__ == Function.prototype);//true
console.log( Function.__proto__ == Function.prototype);//true
console.log( Function.prototype.__proto__ == Object.prototype);//true
关键在这一步: Function.prototype.__proto__ == Object.prototype
数据类型为object的数据对象,内置__proto__对象
而数据类型为function的数据对象(函数),内置__proto_外,还有scope,prototype,length等对象
关键在于object类型的只有声明创建时,而function类型的除了声明创建时,还有函数运行时
var Fn = function(){};//这是函数声明时
Fn();//这是函数运行时.
相关文章推荐
- Function 语意学(inside the c++ object model)
- objective-C 多态
- Swift和Objective-C混合编程
- Objective-C基础知识点总结
- SLua 中,从一个Lua脚本调用 另一个GameObject上的Lua脚本中的函数
- IOS开发基础Object-C(09)—OC内存管理(3)-@property的参数详解
- 解决Volley框架下JsonObjectRequest以POST提交数据,服务端无法获取数据的问题。
- Objective-C:神在细节之中
- Objective-C的hook方案(一): Method Swizzling
- Objective-C Runtime 运行时之四:Method Swizzling
- 《Objective-c开发范例代码大全》
- 虚幻4随笔6 Object和序列化
- 窥探 NSObject
- 详解Objective-C中委托和协议
- 3D Object Proposals for Accurate Object Class Detection
- Objective-C 协议(protocol)
- objectForKey与valueForKey在NSDictionary中的差异
- Entity Framework 出现 "此 ObjectContext 实例已释放,不可再用于需要连接的操作" 的错误
- Objective-C分类 (category)和扩展(Extension)
- Objective-C 注释规范心得