function对象都是Function的实例:

> Object.getOwnPropertyNames(Function)
[ 'length',
'name',
'arguments',
'caller',
'prototype' ]

所以function对象也应该有这些方法或者是属性:

<script type="text/javascript">
var myFunction = function func(name,age){
//请注意,直接调用这个函数的时候this指向谁
console.log(myFunction);
console.log(myFunction.length);
console.log(myFunction.name);
console.log(myFunction.arguments);
console.log(myFunction.caller);
console.log(myFunction.prototype);
}
myFunction.print = function(){
//调用这个myFunction对象的时候this指向的是myFunction这个函数对象,这个你必须搞明白
console.log(this);
console.log(this.length);
console.log(this.name);
console.log(this.arguments);
console.log(this.caller);
console.log(this.prototype);
}
myFunction.prototype.print_name = function(){
console.log('print_name');
}
myFunction('name',22);
myFunction.print();
</script>

所以如果你想要拓展函数,可以给函数添加一些方法:

var myFunction = function func(name,age){}
myFunction.print = function(){
console.log("name");
}
myFunction.print();

如果你想要让所有的函数都有某些属性,那就必须修改Function.prototype了

var myFunction = function func(name,age){}
Function.prototype.print = function(){
console.log("name");
}
myFunction.print();

把函数对象也当成对象,感觉特别不习惯,因为习惯上我会这样做(你让我想象一下,在java中类里面的方法也是对象,可以被调用,然后这个方法还可以有自己的属性,这是多么不可想象的):

var myFunction = function func(name,age){
this.name = name;
this.age = age;
}

我以为我的真的给这个函数对象添加了name和age属性,但是实际上你要这样做:

var myFunction = function func(){
}
myFunction.name = 'myFunction';
myFunction.age = 19;
console.log(myFunction.name);
console.log(myFunction.age);

这时候你就会发现它跟你创建的其他普通对象是不一样的,比如:

var MyObject = function func(){
this.name = 'name';
this.age = 20
}
var my = new MyObject()
console.log(my.age);

你会想怎么这种对象会这么奇特,不是跟function对象添加属性是一样的

Function.method('new', function ( ) {
// Create a new object that inherits from the
// constructor's prototype.
var that = Object.create(this.prototype);
// Invoke the constructor, binding –this- to
// the new object.
var other = this.apply(that, arguments);
// If its return value isn't an object,
// substitute the new object.
return (typeof other === 'object' && other) || that;
});

原因就是new这个操作符所做的操作跟上面这个函数是一样的

所以现在function对象跟其他的object对象就应该统一在一起了:

var myFunction = function func(){
}
myFunction.name = 'name';
myFunction.age = 29
myFunction.get_age = function(){
console.log(this.age);
}
myFunction.get_age();

函数还有一个特点就是他是可以被调用的,它被调用的时候this是根据上下文指向不同的对象

javascript中的function对象的更多相关文章

  1. Javascript学习之Function对象详解

    JavaScript中的Function对象,就是我们常说的函数对象.在JS中,所有的函数也是以对象的形式存在的. 语法 充当Function对象的构造函数使用,用于结合new关键字构造一个新的Fun ...

  2. JavaScript中的Function(函数)对象详解

    JavaScript中的Function对象是函数,函数的用途分为3类: 作为普通逻辑代码容器: 作为对象方法: 作为构造函数. 1.作为普通逻辑代码容器 function multiply(x, y ...

  3. javascript中的Function和Object

    写的很好,理解了很多,特此转发记录 转自:http://blog.csdn.net/tom_221x/archive/2010/02/22/5316675.aspx 在JavaScript中所有的对象 ...

  4. JavaScript中的事件对象

    JavaScript中的事件对象 JavaScript中的事件对象是非常重要的,恐怕是我们在项目中使用的最多的了.在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含这所有与事件有 ...

  5. 浅谈JavaScript中的Function引用类型

    引言 在JavaScript中最有意思的就是函数了,这一切的根源在于函数实际上是一个对象.每一个函数都是Function类型的实例,而且都和其他引用类型的实例一样具有属性和方法.函数作为一个对象,因此 ...

  6. JavaScript中创建字典对象(dictionary)实例

    这篇文章主要介绍了JavaScript中创建字典对象(dictionary)实例,本文直接给出了实现的源码,并给出了使用示例,需要的朋友可以参考下 对于JavaScript来说,其自身的Array对象 ...

  7. Javascript学习1 - Javascript中的类型对象

    原文:Javascript学习1 - Javascript中的类型对象 1.1关于Numbers对象. 常用的方法:number.toString() 不用具体介绍,把数字转换为字符串,相应的还有一个 ...

  8. 详解javascript中的this对象

    详解javascript中的this对象 前言 Javascript是一门基于对象的动态语言,也就是说,所有东西都是对象,一个很典型的例子就是函数也被视为普通的对象.Javascript可以通过一定的 ...

  9. javascript中如何获取对象名

    javascript中如何获取对象名 一.总结 一句话总结:将对象传入参数,看参数是否为函数(js中的对象和函数是一个意思么(函数肯定是对象)),对象参数.name属性即可获得 //版本4 funct ...

随机推荐

  1. Automotive Security的一些资料和心得(3):Vehicular Security技术

    1. Overview 1.1. Secure Hardware Extension (SHE) 基本结构:ECU里面有一块单独的Secure Zone.Secure Zone里面是SHE模块.SHE ...

  2. 用JavaScript探测页面上的广告是否被AdBlock屏蔽了的方法

    每个人都讨厌广告.看电视.看电影.看优酷.看网页时,对满天飞的广告也是深恶痛绝.广告是一个不招人喜欢的东西.但是,对一个中小网站站长/博客主来说,广告几乎是唯一的能成支持网站/博客正常运转的资金来源. ...

  3. 换一换js

    (function(){ var tit = $("#changes"), con = $("#wday>ul"), page = con.length, ...

  4. map(function, sequence)

    map(function, sequence) :对sequence中的item依次执行function(item),见执行结果组成一个List返回: >>> lt = range( ...

  5. Dynamic Programming (DP) 问题总结

    所有的 DP 问题都可以简单得用 Recursion 的方式实现.这通常是最容易想到的思路. 问题是这种实现不够 efficient,存在 subproblem 被重复计算的情况.有两种解决这个问题的 ...

  6. 第三章—Windows程序

    这一章我都不知道该如何写了,呵呵~~ 毕竟,Win32是一个非常深奥的系统,目前还容不得我这种 小辈在这儿说三道四,不过,我既然是要写给那些入门阶段的朋友们看的,又不是写给那些搞程序设计老鸟看的,所以 ...

  7. vs2012+cmake+opencv+opencv unable to find a build program corresponding to "Visual Studio 12 Win64". CMAKE_MAKE_PROGRAM is not set

    搜索了下,说什么的都有! 一,提示找不到 cmake-2.8.12.1 的 modles 卸载了cmake后发现 cmd 中的 cmake --version 还是 2.8.11.1 找到是我的cyg ...

  8. UVALive - 3713 Astronauts

    给定n个宇航员的年龄,平均年龄为 ave,根据下列要求分配任务: B任务只能分配给年龄<ave的宇航员: A任务只能分配给年龄>=ave的宇航员: C任务可以任意分配. 给定m组互相憎恨的 ...

  9. 158. Read N Characters Given Read4 II - Call multiple times

    题目: The API: int read4(char *buf) reads 4 characters at a time from a file. The return value is the ...

  10. AfxBeginThread和AfxEndThread+内存泄露

    ref http://blog.csdn.net/kut00/article/details/4209680 启动线程: CWinThread* AfxBeginThread( 线程函数, this ...