javascript中万恶的function实例分析


Posted in Javascript onMay 25, 2011

javascript中最有特色而又让你困惑的function算一个了
下面看一下常用操作

function doit(){ 
  ..... 
} 
  doit();

javascript中的函数我们可以把它当作方法使用
var obj=new Object(); 

obj.say=function(){ 
  ..... 

} 

obj.say();

而function实际上就是对象(即Function类型的实例)
function result(num1, num2) { 
return num1 + num2; 
}

var result = new Function("num1", "num2", "return num1+num2");
以上执行效果是一样的,同时function result还可以这样写(即函数表达式)

var result=function(num1,num2){ 
return num1+num2; 
}

这俩种写法的唯一区别是function是优先执行,而函数表达式是代码执行到才执行,另外每个函数内部都有一个类似数组的arguments对象
函数执行动态参数,即
function result(){ 
return arguments[0]+arguments[1]; 
} 
result(1,2);

arguments在动态传递参数方面经常使用
既然说function是对象,那么它应该也具体属性
function person(){ 
.... 
} 
person.name="xxxx"; 
person.say=function(){ 
alert(this.name); 
} 
person.say(); //alert("xxxx")

我们还可以把它当成类,而函数体相当于构造函数
function Person(nm){ 
this.name=nm; 
this.say=function(){ 
alert(nm); 
alert(this.name); 
} 
} 
var p1=new Person("ygm1"); 
p1.say(); //alert ygm1 ygm1 
var p2=new Person("ygm2"); 
p2.say(); //alert ygm2 ygm2

注意这里要用this.name 因为this代表的是当前对象,如果直接alert(name) 求的是window对象的属性,同时传进来的参数nm在方法say中可以直接用,其实这涉及到作用域链,每个function体就是一个作用域,子域可以访问到父域的属性,而反过来却不行(其实也是可以取到的,设计到闭包一些知识,这里不做详解..)
与其他一些OO语言相比,每个类都可以有一些静态属性或方法,而javascript通过原型来模拟以达到每个对象共享其属性
function Person(num) { 
..... 
} 
Person.prototype.name = "ygm"; 
alert(new Person().name);

但OO语言的静态方法都是由类去调用,不能实例化本身的,javascript中由于其特殊性恰好相反
注意这里alertPerson的name属性,如果函数体内没有查找到name则会到原型中去找,如果查找到则会屏蔽原型中的name直接返回其值
其实每创建一个function的同时也创建了一个原型对象,而原型对象引用自object,所以object是所有对象的基类
我们可以重写原型对象
Person.prototype=new ParentPerson();
Person的原型对象指向ParentPerson对象,而ParentPerson对象又指向自己的原型对象...,也就形成了原型链...
好了 今天就写到这里...
Javascript 相关文章推荐
JS等比例缩小图片尺寸的实例
Feb 27 Javascript
Javascript中判断对象是否为空
Jun 10 Javascript
JS实现为排序好的字符串找出重复行的方法
Mar 02 Javascript
jQuery 特性操作详解及实例代码
Sep 29 Javascript
sea.js常用的api简易文档
Nov 15 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
Mar 13 Javascript
vue中实现图片和文件上传的示例代码
Mar 16 Javascript
Layui 设置select下拉框自动选中某项的方法
Aug 14 Javascript
js使用Promise实现简单的Ajax缓存
Nov 14 Javascript
基于Node.js的大文件分片上传示例
Jun 19 Javascript
vue新建项目并配置标准路由过程解析
Dec 09 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
Jun 05 Javascript
js 页面关闭前的出现提示的实现代码
May 25 #Javascript
仅IE不支持setTimeout/setInterval函数的第三个以上参数
May 25 #Javascript
IE6/7/8/9不支持exec的简写方式
May 25 #Javascript
25个优雅的jQuery Tooltip插件推荐
May 25 #Javascript
在chrome浏览器中,防止input[text]和textarea在聚焦时出现黄色边框的解决方法
May 24 #Javascript
javascript中String类的subString()方法和slice()方法
May 24 #Javascript
js中关于String对象的replace使用详解
May 24 #Javascript
You might like
php下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
PHP备份/还原MySQL数据库的代码
2011/01/06 PHP
php实现图片压缩处理
2020/09/09 PHP
JavaScript调用后台的三种方法实例
2013/10/17 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
jQuery实现拖拽效果插件的方法
2015/03/23 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
javascript中利用柯里化函数实现bind方法
2016/04/29 Javascript
Node.js的基本知识简单汇总
2016/09/19 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
2016/11/30 Javascript
详解js前端代码异常监控
2017/01/11 Javascript
详解用vue-cli来搭建vue项目和webpack
2017/04/20 Javascript
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
详解Python中的多线程编程
2015/04/09 Python
python爬虫入门教程--利用requests构建知乎API(三)
2017/05/25 Python
python增加矩阵维度的实例讲解
2018/04/04 Python
python实现串口通信的示例代码
2020/02/10 Python
Python可以实现栈的结构吗
2020/05/27 Python
Python不支持 i ++ 语法的原因解析
2020/07/22 Python
Matlab使用Plot函数实现数据动态显示方法总结
2021/02/25 Python
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
医学检验专业个人求职信范文
2013/12/04 职场文书
高一物理教学反思
2014/01/24 职场文书
群众路线党课主持词
2014/04/01 职场文书
推广普通话共筑中国梦演讲稿
2014/09/21 职场文书
网络营销实训总结
2015/08/03 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
分享MySQL常用 内核 Debug 几种常见方法
2022/03/17 MySQL
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android