- 浏览: 313884 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhangliguoaccp:
对于女人不要太看重吧,喜欢你的自然留下,你若盛开,蝴蝶自来!
遇见她 -
yiqi1943:
springtest支持的spring版本最低是多少啊
Spring Test -
WITLP:
爱,我只知道你一部分的事情,没想到你从华智出来这么坎坷
2009 为什么待到毕业时? -
WITLP:
哈哈,原来你就是传说中的欧阳平?
ANT 简单使用 -
bo_hai:
谢谢。总结的很好。
工具 PL/SQL 快捷键
转自:http://www.iteye.com/wiki/Object_Oriented_JavaScript/1281-javascript-object-oriented-technology-three
函数
javascript函数相信大家都写过不少了,所以我们这里只是简单介绍一下.
创建函数:
function f(x) {........}
var f = function(x) {......}
上面这两种形式都可以创建名为f()的函数,不过后一种形式可以创建匿名函数
函数定义时可以设置参数,如果传给函数的参数个数不够,则从最左边起依次对应,其余的用undefined赋值,如果传给函数
的参数多于函数定义参数的个数,则多出的参数被忽略.
因此,对于定义好的函数,我们不能指望调用者将所有的参数全部传进来.对于那些必须用到的参数应该在函数体中
加以检测(用!操作符),或者设置默认值然后同参数进行或(||)操作来取得参数.
函数的arguments属性
在每一个函数体的内部,都有一个arguments标识符,这个标识符代表了一个Arguments对象.Arguments对象非常类似
于Array(数组)对象,比如都有length属性,访问它的值用"[]"操作符利用索引来访问参数值,但是,二者是完全不同的
东西,仅仅是表面上有共同点而已(比如说修改Arguments对象的length属性并不会改变它的长度).
Arguments对象有一个callee属性,标示了当前Arguments对象所在的方法.可以使用它来实现匿名函数的内部递归调用.
Method--方法
方法就是函数.我们知道,每一个对象都包含0个或多个属性,属性可以是任意类型,当然也包括对象.函数本身就是一种
对象,因此我们完全可以把一个函数放到一个对象里面,此时,这个函数就成了对象的一个方法.此后如果要使用该方法,
则可以通过对象名利用"."操作符来实现.
方法的调用需要对象的支持,那么在方法中如何获取对象的属性呢?this!this关键字我们已经很熟悉了,在javascript的方
法中,我们可以用this来取得对方法调用者(对象)的引用,从而获取方法调用者的各种属性.
下面我们来一个更加面向对象的例子.
在上面的例子中,完全可以用person.name=..来直接改变person的name属性,在此我们只是为了展示一下刚才提到的内容.
另一种改变person属性的方法就是:定义一个function,接收两个参数,一个是person,一个是name的值,看起来像是这样:
changeName(person,"newName").哪种方法好呢?很明显,例子中的方法更形象,更直观一些,而且好像有了那么一点面向
对象的影子.
再次强调一下,方法(Method)本身就是是函数(function),只不过方法的使用更受限制.在后面的篇幅中,如果提到函数,那么
提到的内容同样适用于方法,反之则不尽然.
函数的prototype属性
每一个函数都包含了一个prototype(原型)属性,这个属性构成了javascript面向对象的核心基础.在后面我们会详细讨论.
函数
javascript函数相信大家都写过不少了,所以我们这里只是简单介绍一下.
创建函数:
function f(x) {........}
var f = function(x) {......}
上面这两种形式都可以创建名为f()的函数,不过后一种形式可以创建匿名函数
函数定义时可以设置参数,如果传给函数的参数个数不够,则从最左边起依次对应,其余的用undefined赋值,如果传给函数
的参数多于函数定义参数的个数,则多出的参数被忽略.
function myprint(s1,s2,s3) { alert(s1+"_"+s2+"_"+s3); } myprint(); //undefined_undefined_undefined myprint("string1","string2"); //string1_string2_undefined myprint("string1","string2","string3","string4"); //string1_string2_string3
因此,对于定义好的函数,我们不能指望调用者将所有的参数全部传进来.对于那些必须用到的参数应该在函数体中
加以检测(用!操作符),或者设置默认值然后同参数进行或(||)操作来取得参数.
function myprint(s1,person) { var defaultperson = { //默认person对象 "name":"name1", "age":18, "sex":"female" }; if(!s1) { //s1不允许为空 alert("s1 must be input!"); return false; } person = person || defaultperson; //接受person对象参数 alert(s1+"_"+person.name+":"+person.age+":"+person.sex); }; myprint(); //s1 must be input! myprint("s1"); //s1_name1:18:female myprint("s1",{"name":"sdcyst","age":23,"sex":"male"}); //s1_sdcyst:23:male
函数的arguments属性
在每一个函数体的内部,都有一个arguments标识符,这个标识符代表了一个Arguments对象.Arguments对象非常类似
于Array(数组)对象,比如都有length属性,访问它的值用"[]"操作符利用索引来访问参数值,但是,二者是完全不同的
东西,仅仅是表面上有共同点而已(比如说修改Arguments对象的length属性并不会改变它的长度).
function myargs() { alert(arguments.length); alert(arguments[0]); } myargs(); //0 --- undefined myargs("1",[1,2]); //2 --- 1
Arguments对象有一个callee属性,标示了当前Arguments对象所在的方法.可以使用它来实现匿名函数的内部递归调用.
function(x) { if (x <= 1) return 1; return x * arguments.callee(x-1); } (section8.2)
Method--方法
方法就是函数.我们知道,每一个对象都包含0个或多个属性,属性可以是任意类型,当然也包括对象.函数本身就是一种
对象,因此我们完全可以把一个函数放到一个对象里面,此时,这个函数就成了对象的一个方法.此后如果要使用该方法,
则可以通过对象名利用"."操作符来实现.
var obj = {f0:function(){alert("f0");}}; //对象包含一个方法 function f1() {alert("f1");} obj.f1 = f1; //为对象添加方法 obj.f0(); //f0 f0是obj的方法 obj.f1(); //f1 f1是obj的方法 f1(); //f1 f1同时又是一个函数,可以直接调用 f0(); //f0仅仅是obj的方法,只能通过对象来调用
方法的调用需要对象的支持,那么在方法中如何获取对象的属性呢?this!this关键字我们已经很熟悉了,在javascript的方
法中,我们可以用this来取得对方法调用者(对象)的引用,从而获取方法调用者的各种属性.
var obj = {"name":"NAME","sex":"female"}; obj.print = function() { //为对象添加方法 alert(this.name + "_" + this["sex"]); }; obj.print(); //NAME_female obj.sex = "male"; obj.print(); //NAME_male var obj = {"name":"NAME","sex":"female"}; obj.print = function() { //为对象添加方法 alert(this.name + "_" + this["sex"]); }; obj.print(); //NAME_female obj.sex = "male"; obj.print(); //NAME_male
下面我们来一个更加面向对象的例子.
var person = {name:"defaultname", setName:function(s){ this.name = s; }, "printName":function(){ alert(this.name); }} person.printName(); //defaultname person.setName("newName"); person.printName(); //newName
在上面的例子中,完全可以用person.name=..来直接改变person的name属性,在此我们只是为了展示一下刚才提到的内容.
另一种改变person属性的方法就是:定义一个function,接收两个参数,一个是person,一个是name的值,看起来像是这样:
changeName(person,"newName").哪种方法好呢?很明显,例子中的方法更形象,更直观一些,而且好像有了那么一点面向
对象的影子.
再次强调一下,方法(Method)本身就是是函数(function),只不过方法的使用更受限制.在后面的篇幅中,如果提到函数,那么
提到的内容同样适用于方法,反之则不尽然.
函数的prototype属性
每一个函数都包含了一个prototype(原型)属性,这个属性构成了javascript面向对象的核心基础.在后面我们会详细讨论.
发表评论
-
可输入的下拉框,兼容IE6,7,8,9
2013-06-21 14:26 1245有时候因为包含了这一部分导致下拉框不可使用: <! ... -
JS Web前段性能问题
2011-03-29 18:00 808Web前段性能问题 -
JS body.clientWidth,documentElement.clientWidth,clientX
2011-03-29 16:50 1672event的x,clientX,offsetX ... -
自写 js validation 验证框架
2011-02-15 16:32 1626一、背景: 一个 ... -
JS jquery ajax post html
2010-06-30 15:14 1607$(document).ready(function(){ ... -
JS jquery自动补全
2010-06-30 14:18 2546思路: 1 输入字符串,keyup事件,通过输入的字符串去 ... -
JS jquery常用语法
2010-06-30 14:05 875$("#id").val(); $( ... -
JS 过滤特殊字符
2010-06-29 15:44 3063<input type = "text&quo ... -
JS 注册监听
2010-06-22 15:45 1241<div id ="testdiv" ... -
JS Jquery 锁屏
2010-06-22 13:26 2425http://jquery.malsup.com/block/ ... -
JS 判断是否IE浏览器
2010-06-12 12:33 1358var ie = 0/*@cc_on+1@*/ ; 利用IE ... -
JS event获取触发事件的对象
2010-04-21 09:11 1248更多信息查询API <script> <s ... -
JS js控制鼠标左右键和复制粘贴事件
2010-04-12 20:27 3485JS js控制鼠标左右键和 ... -
JS js控制select多选
2010-04-07 10:46 1821<script> function move ... -
JS 转换函数和属性定义范围
2010-04-07 09:54 902<script> //转换函数 eval() ... -
JS 加码解码
2010-04-07 09:52 1475<script> //javascript加码解 ... -
JS 定时任务setTimeout与setInterval
2010-04-07 09:49 1995~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ... -
JS 框架跳转
2010-04-06 13:06 1325<script language="javas ... -
JS prototype例子原型与继承
2010-03-29 16:15 1679prototype 属性 返回对象类型原型的引用。 ... -
JS 获得当前实时日期和时分秒星期 日期比较 当前日期格式化
2010-03-26 13:36 3012这些查API文档,一目了然,这是一个js获得当前实时日期和时分 ...
相关推荐
JavaEye博文JavaEye博文JavaEye博文JavaEye博文JavaEye博文
JavaEye+技术架构,讲述java框架的应用
javaeye Robbin 论缓存技术方面的东西
_filesjavascript如何避免内存泄露 - - JavaEye技术网站_filesprototype_js深入研究_files从 prototype_js 深入学习 javascript 的面向对象特性 - - AJAX - JavaEye论坛_files带参数的闭包函数的巧妙应用 - ...
javaeye被黑 大家看看
From: JavaEye.com prototype提供了一套JavaScript面向对象基础设施,我们可以使用它来进行面向对象编程,定义对象类型方式如下: var Person = Class.create(); Person.prototype = { initialize : ...
JavaEye3.0开发手记
javaeye的信息提示框代码之css,application.js
From: JavaEye.comprototype提供了一套JavaScript面向对象基础设施,我们可以使用它来进行面向对象编程,定义对象类型方式如下: var Person = Class.create();Person.prototype = { initialize : function(name, ...
javaeye月刊2008年4月 总第2期.pdf
javaeye sourcecode 开源安卓客户端, JavaEYE
JavaEye新闻月刊_-_2009年3月_-_总第13期.
javaeye 论坛小测试 javaeye论坛小测试答案 javaeye论坛测试答案 这下你们就省事了。
Java面试经典试题及答案- SpringArt - JavaEye技术网站
Jsp-Servlet复习笔记-----第3章 Servlet技术 - 堕落天使 - JavaEye技术网站.mhtJsp-Servlet复习笔记-----第3章 Servlet技术 - 堕落天使 - JavaEye技术网站.mht
From: JavaEye.com 枚举JavaScript对象的函数: function iterator(obj) { for (var property in obj) { [removed]ln(“” + property + ” : ” + obj[property] + “”); } } 一个简单示例(test...
自己打算找一个和javaeye一样的workpress代码高亮插件, 没找到, 于是把javaeye的拔了出来.
讲述javaeye硬件架构以及软件架构的发展历史