??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧美日韩综合久久久久,国内精品久久久久影院亚洲,亚洲国产一区在线http://www.tkk7.com/zkjbeyond/category/10156.html原创专栏 开源学?/description>zh-cnTue, 27 Feb 2007 20:40:08 GMTTue, 27 Feb 2007 20:40:08 GMT60ajax blog 搬家http://www.tkk7.com/zkjbeyond/archive/2006/08/21/64760.html原创专栏 开源学?/dc:creator>原创专栏 开源学?/author>Mon, 21 Aug 2006 04:52:00 GMThttp://www.tkk7.com/zkjbeyond/archive/2006/08/21/64760.htmlhttp://www.tkk7.com/zkjbeyond/comments/64760.htmlhttp://www.tkk7.com/zkjbeyond/archive/2006/08/21/64760.html#Feedback2http://www.tkk7.com/zkjbeyond/comments/commentRss/64760.htmlhttp://www.tkk7.com/zkjbeyond/services/trackbacks/64760.html
朋友l了个blog,专门放ajax的文章吧Q以后这专门写关于java的东西吧?br />http://zkj.wisekernel.net

谢谢支持?img src ="http://www.tkk7.com/zkjbeyond/aggbug/64760.html" width = "1" height = "1" />

]]>
再说说prototype.js的事件注?/title><link>http://www.tkk7.com/zkjbeyond/archive/2006/06/12/52083.html</link><dc:creator>原创专栏 开源学?/dc:creator><author>原创专栏 开源学?/author><pubDate>Sun, 11 Jun 2006 18:12:00 GMT</pubDate><guid>http://www.tkk7.com/zkjbeyond/archive/2006/06/12/52083.html</guid><wfw:comment>http://www.tkk7.com/zkjbeyond/comments/52083.html</wfw:comment><comments>http://www.tkk7.com/zkjbeyond/archive/2006/06/12/52083.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.tkk7.com/zkjbeyond/comments/commentRss/52083.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zkjbeyond/services/trackbacks/52083.html</trackback:ping><description><![CDATA[     摘要: 框架实现人员必看 <br>关于prototype.js?bind函数的问? ? 拖拉层代码的 <br> <br>  <a href='http://www.tkk7.com/zkjbeyond/archive/2006/06/12/52083.html'>阅读全文</a><img src ="http://www.tkk7.com/zkjbeyond/aggbug/52083.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zkjbeyond/" target="_blank">原创专栏 开源学?/a> 2006-06-12 02:12 <a href="http://www.tkk7.com/zkjbeyond/archive/2006/06/12/52083.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>闭包Q箋Q?/title><link>http://www.tkk7.com/zkjbeyond/archive/2006/05/23/47725.html</link><dc:creator>原创专栏 开源学?/dc:creator><author>原创专栏 开源学?/author><pubDate>Tue, 23 May 2006 15:51:00 GMT</pubDate><guid>http://www.tkk7.com/zkjbeyond/archive/2006/05/23/47725.html</guid><wfw:comment>http://www.tkk7.com/zkjbeyond/comments/47725.html</wfw:comment><comments>http://www.tkk7.com/zkjbeyond/archive/2006/05/23/47725.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/zkjbeyond/comments/commentRss/47725.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zkjbeyond/services/trackbacks/47725.html</trackback:ping><description><![CDATA[     摘要: 书接上回Ql闭包?<br> <br>如果你懂javascriptQ而你不了解javascript的闭包?<br>那你错qjavascript最强大Ҏ(gu)之一Q闭包)?nbsp; <a href='http://www.tkk7.com/zkjbeyond/archive/2006/05/23/47725.html'>阅读全文</a><img src ="http://www.tkk7.com/zkjbeyond/aggbug/47725.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zkjbeyond/" target="_blank">原创专栏 开源学?/a> 2006-05-23 23:51 <a href="http://www.tkk7.com/zkjbeyond/archive/2006/05/23/47725.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript语言中的闭包http://www.tkk7.com/zkjbeyond/archive/2006/05/19/47025.html原创专栏 开源学?/dc:creator>原创专栏 开源学?/author>Fri, 19 May 2006 03:46:00 GMThttp://www.tkk7.com/zkjbeyond/archive/2006/05/19/47025.htmlhttp://www.tkk7.com/zkjbeyond/comments/47025.htmlhttp://www.tkk7.com/zkjbeyond/archive/2006/05/19/47025.html#Feedback5http://www.tkk7.com/zkjbeyond/comments/commentRss/47025.htmlhttp://www.tkk7.com/zkjbeyond/services/trackbacks/47025.html
groove,python,perlq些高脚本语言都有闭包概念。不懂这些语a的可能没Z(x)理解闭包了?
q运的是大家都熟(zhn)javascript,那么从javascript开始闭包认识吧?
感觉闭包是高U的Q但也是晦ӆ的?

本文译自
http://jibbering.com/faq/faq_notes/closures.html
  阅读全文

]]>
javascriptq阶之对象篇(7)|页中的javascript对象http://www.tkk7.com/zkjbeyond/archive/2006/04/23/42666.html原创专栏 开源学?/dc:creator>原创专栏 开源学?/author>Sun, 23 Apr 2006 07:36:00 GMThttp://www.tkk7.com/zkjbeyond/archive/2006/04/23/42666.htmlhttp://www.tkk7.com/zkjbeyond/comments/42666.htmlhttp://www.tkk7.com/zkjbeyond/archive/2006/04/23/42666.html#Feedback0http://www.tkk7.com/zkjbeyond/comments/commentRss/42666.htmlhttp://www.tkk7.com/zkjbeyond/services/trackbacks/42666.html 1、废?br />   q部分将要描q浏览器为我们创建的对象。就是大家熟(zhn)的window,document

{。一般书上都叫对象层ơ和文档对象模型。用dom标准来说Q一般浏览器都实?/p>

?UDOMQ关于DOM标准我感觉知?U就可以了。对于DOM标准W3C早已定义?U?/p>

Q?U,三也在标准化,问题是各个浏览器不完全实玎ͼ其是IE的事件模型,

完全不和DOM一致。(不过prototype.js已经做了很好的封装)
    我这里不?x)讲dom接口Q更不会(x)讲各个浏览器的如何实现这些接口及(qing)区别。(

我也没这能力Q。而是要猜一下浏览器是怎么用javascript定义q些接口或类

的。(注意是猜,个h理解Q?/p>

2、引?/strong>

<SCRIPT LANGUAGE="JavaScript">
<!--
alert(document);
alert(typeof(document));
//alert(Document);//出错
function desc(obj){
  var ret='';
  for(var key in obj){
    ret+=key+':'+obj[key]+'</br>';
  }
  return ret;
}
document.writeln(desc(document));
//-->
</SCRIPT>

以上单的javascript代码Q不知大家提疑问没有?br />首先Qdocument是个javascript对象Q谁创徏了它。;document的类是什?/p>

(function Document(){....} 可能是new Document()创徏了它)Qdocument有些

什么属性或Ҏ(gu)。这些对象与html关系是什么。这些对象与dom标准有什么关pR?/p>

接下来将试着回答q些问题。我?x)侧重讲q我的理解思\Q而不是具体哪个方?/p>

Q接口?/p>

3、一个简单的例子的深入理?/strong>

<SCRIPT LANGUAGE="JavaScript">
<!--
    alert(document);//存在
    alert(this.document==window.document);//true
//-->
</SCRIPT>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<SCRIPT LANGUAGE="JavaScript">
    alert(document.getElementById('xm'));//null
</SCRIPT>
</HEAD>
<SCRIPT LANGUAGE="JavaScript">
    alert(document.getElementById('xm'));//null
</SCRIPT>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
    alert(document.getElementById('xm'));//null
</SCRIPT>
<input type="text" id="xm">
<SCRIPT LANGUAGE="JavaScript">
    alert(document.getElementById('xm'));//存在
</SCRIPT>
</BODY>
<SCRIPT LANGUAGE="JavaScript">
    alert(document.getElementById('xm'));//存在
</SCRIPT>
</HTML>

上面代码说明几个问题Q?br />a?/strong>window\this是我在变量里面提到过的窗体的全局对象Qdocument是它?/p>

一个属性,也叫全局属性?br />b?/strong>window,document在html最前面已经存在了。我们可以随处用document对象

?br />c?/strong>对于输入框按钮这chtml标记的javascript对象只有在解释过以后才能讉K?/p>

。当然我们编码用到这些对象时Q都在body.onload或鼠标触发,一般不?x)出错?br />d?/strong>例子中的document.getElementById('xm')javascript对象和我们自己创建的

javascript对象有什么区别呢Q从应用角度看没有区别,只是自己定义的对象由

自己new来初始化Q而document.getElementById('xm')有浏览器为我们初始化?/p>

象,我们直接用方法得到句柄就可以了(有多U方法)?br />e?/strong>我们怎么知道q些对象的用法呢Q查看w3c DOM参考吗Q我认ؓ(f)不用?/p>

4、浏览器为我们创建的对象与我们自己定义的对象的区别?/strong>

<input type="text" id="xm" value="aaa">
<INPUT TYPE="button" value='click me' onclick="alert

(document.getElementById('xm').value);
alert(document.getElementById('myxm').value);">
<br>
<SCRIPT LANGUAGE="JavaScript">
<!--
function desc(obj){
  var ret='';
  for(var key in obj){
    ret+=key+':'+obj[key]+'</br>';
  }
  return ret;
}
function MyText(id,value){
    this.id=id;
 this.outHtml='<input type=text id='+id+' value='+value+'>';
 this.toString=function(){
        return this.outHtml;
 }
 //...
 //...
 //...
}
//document.writeln(desc(document.getElementById('xm')));
var myText=new MyText('myxm','zkj');
document.writeln(myText);
//-->
</SCRIPT>

希望你仔l的看看上面代码的执行结果。可能你?x)得到更震撼的想法来。暂时我

有以下几个感惻I(x)
a?/strong>我们自己也可以写一个界面控Ӟ如果把属性徏立全的话Q完全可以复原浏?/p>

器的内徏cR?br />b?/strong>反过来,对于览器ؓ(f)我们创徏的对象,我们可以当成自己的对象一样用?/p>

看看prototype.js中,使用了内建对象的Ҏ(gu)?/p>

escapeHTML: function() {
    var div = document.createElement('div');
    var text = document.createTextNode(this);
    div.appendChild(text);
    return div.innerHTML;
  },
  unescapeHTML: function() {
    var div = document.createElement('div');
    div.innerHTML = this.stripTags();
    return div.childNodes[0] ? div.childNodes[0].nodeValue : '';
  },
c?/strong>大家可以打开描述注释Q看?lt;input >到底包含哪些属性和Ҏ(gu)。注?/p>

outerHTML属性的值是什?在网上表示什么。可以看出javascript对象?/p>

outerHTML属性就是html(xhtml)规范中的标签。这L(fng)了我们写javascriptUI?/p>

件的新思\Q一个控件就是一个javascript对象Q其实很多h都这样做了,但好

象都是innerHtml{等Q。可以象asp.net或jsf那样~写l合控g?br />大家可以看一下ActiveWidgets代码Q与我的思\有些差别Q,我认U基?/p>

html标签的UI控g无论性能、开发h员用难度上都不错?
对于dojo的widgetq种做UI做法我个Z很赞同,完全用divQ图片实C一?/p>

html的UI标签。性能不好Q开发h员上手不Ҏ(gu)Q美工更不能修改Q另外图片都

是定ȝQ界面也比较单调Q也不好修改?/p>

对于自己实现javascript控gQ我认ؓ(f)在htmlUI基础上就可以了,毕竟自己实现

存在的UI隑ֺ不小。把html的标准UIl合成新的控件。例如,我们可以很容易的

实现一个包括?Q登?密码 验证?认Q?的组合javascript控g


d?/strong>dom标准与浏览器对象
打开document.writeln(desc(document.getElementById('xm')));Q你可以看到<

input type="text">的所有属性。这些属?”dom标准“,之所以加引号QDOM?/p>

准我们有很多误解Q认为DOM标准是个什么高不可?qing)、不可违抗的、复杂的东西?br />首先Q我们接触了静态HTML,xmlQ有了DOM对象模型Q熟(zhn)java的都知道java的实

玎ͼQ但javascript语言的特点不能象java,c++那样来实现DOM对象模型。例?

input l承?HTMLElementQHTMLElement定义的一堆属性。按照dom标准,所有浏

览器实现 input javascript对象旉必须把这些属性加上,q就叫符合标准。其

实说白了QDOM标准是览器ؓ(f)我们实现的javascript代码的d。(可以览

器厂商不完全实现Q?br />看protorype.js的代?br />Z支持多了览器,定义下面代码。说明有的浏览器|页全局变量里有Element

QEventQ有些浏览器没给我们定义。所以只能这样了?/p>

if (!window.Element) {
  var Element = new Object();
}
if (!window.Event) {
  var Event = new Object();
}

q有用AJAX技术时
'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'Q?其实很简

单,是览器中有没有这些javascript实现了。所有大家在DWR框架中用iframe

实现了一个javascript  XMLHTTPcR?/p>

e?/strong>与xhtml标准的矛?br />在xhtml中,<input type="button"> 双引h必须的,但outerHTML属性中却没

双引受还没想明白?/p>

5、浏览器为我们创Z几类对象
a、全局对象window或this。其实javascript的全局变量、全局Ҏ(gu)Q如

Math,setTimeout()Q都可以由window对象讉K。另外浏览器的特D函数或属性?/p>

Q如window.status,window.alert()Q?br />b、document对象。包括图片,applet,form{属性,可能我们用的最多。也是访

问我们可见的元素的入口(document.getElementByIdQ?也提供了动态创建html

标签的方法。如var t=new Text("test");没有q样Ҏ(gu)Q只?var

t=document.creatTextNode("test");都由document提供的工厂方法来创徏?br />c、页面中的html标签Q当解释执行q,览器会(x)Z初始化对象,攑ֈdocument

对象中去?/p>

6、对DOM标准的认?/strong>
DOM标准定义了接口,没有定义cR浏览器为我们实Cq些接口Q实现这些接?/p>

的类我们也看不见。所以这里接口的含义和java中接口的含义不同?br />例如我们常用的document对象
DOM标准中定义了个Document接口Q实现HTMLElemnt接口?br />Document接口和HTMLElemnt接口在DOM标准中定义了很多属性和Ҏ(gu)?br />注意我们使用的document对象是浏览器为我们创建的javascript对象Q到?/p>

document对象有哪些属性和Ҏ(gu)是有览器决定的Q而不是由DOM标准军_的?br />在这里javascript世界里没有承概念,所以DOM标准定义的接口,对于我们开?/p>

人员来说只能当成一个参考手册,象javadoc?/p>

7、如何写览器的javascript代码
   q难度大了点.但说I了Q只要我们用javascript代码把浏览器没符合DOM标准

的代码补全就好了。但DOM标准之大不是一般h能全部搞清楚的,览器厂商也?/p>

坏,让这个工作更难了。 ?现在好象有个误区Qh们写javascript都喜Ƣ按?/p>

DOM标准来写。如果我们按照各个浏览器实现DOM标准的交集写代码的话Q可能会(x)

更好炏V?/p>

 


 



]]>
javascriptq阶之对象篇(5)l承http://www.tkk7.com/zkjbeyond/archive/2006/04/17/41532.html原创专栏 开源学?/dc:creator>原创专栏 开源学?/author>Mon, 17 Apr 2006 15:19:00 GMThttp://www.tkk7.com/zkjbeyond/archive/2006/04/17/41532.htmlhttp://www.tkk7.com/zkjbeyond/comments/41532.htmlhttp://www.tkk7.com/zkjbeyond/archive/2006/04/17/41532.html#Feedback0http://www.tkk7.com/zkjbeyond/comments/commentRss/41532.htmlhttp://www.tkk7.com/zkjbeyond/services/trackbacks/41532.html < SCRIPT LANGUAGE  =   " JavaScript " >  
<!--  
 Object.extend  
=    function (destination, source)    {
   
for   (property  in  source)    {
    destination[property]  
=   source[property];
  }
 
   
return   destination;
}
 
 
  function  Man()  
{
     
this  .name  =   ' zkj ' ;
}
 
Man.prototype.type 
=   ' 男h ' ;
Man.prototype.getType 
=  function ()   {
     
return     this  .type;
}
 
  function  Woman()  
{}  
 
Object.extend(Woman.prototype,Man.prototype);
 var  man 
=   new   Man();
 var  woman 
=   new   Woman();
alert(man.getType());
alert(man.name);
alert(woman.getType());
alert(woman.name);
//  --> 
</ SCRIPT >   我只能说javascript的承是模拟实现的。和java,c++中是不同的。是依靠prototype实现的?br />我个Z来不用javascript的“扎쀝,始终认ؓ(f)javascript实现的承不是真正的l承。可能是受java”毒害“够深?br />在javascript中,我把l承分ؓ(f)两类Q?cȝ承,对象l承?br />Q?Q、prototype.js中的l承
prototype.js中用如下代码实现l承。我认ؓ(f)只是个属性拷贝过E?br />
Object.extend  =   function (destination, source)   {
   
for  (property  in  source)   {
    destination[property]  
=  source[property];
  }
 
   
return  destination;
}
 

//Object.prototype.extend 感觉q句话没必要Q太模仿java了,惌对象实例直接l承?br />    a、prototype.js中的cȝ?br />
prototype.js  1.3 . 1 
     String.prototype.extend(  
{
      stripTags:  function ()   
{
       
return   this .replace( /< \ /? [ ^> ] +>/ gi, '');
    }
 ,

    escapeHTML:  function ()   
{
       var  div  
=  document.createElement('div');
       var  text  
=  document.createTextNode( this );
      div.appendChild(text);
       
return  div.innerHTML;
    }
 ,

    unescapeHTML:  function ()   
{
       var  div  
=  document.createElement('div');
      div.innerHTML  
=   this .stripTags();
       
return  div.childNodes[ 0 ].nodeValue;
    }
 
    }
 );

    我把q类型的l承叫做cȝ承,直接把你自己写的对象属性拷贝到原型对象中去?/p>

<SCRIPT LANGUAGE = "JavaScript"> 
<!-- 
 Object.extend  
=   function (destination, source)   {
   
for  (property  in  source)   {
    destination[property]  
=  source[property];
  }
 
   
return  destination;
}
 
 
  function  Man()  
{
     
this .name = 'zkj';
}
 
Man.prototype.type 
= '男h';
Man.prototype.getType 
= function ()  {
     
return   this .type;
}
 
  function  Woman()  
{} 
 
Object.extend(Woman.prototype,Man.prototype);
 var  man 
= new  Man();
 var  woman 
= new  Woman();
alert(man.getType());
alert(man.name);
alert(woman.getType());
alert(woman.name);
// --> 
</SCRIPT> 

看了以上代码Q可能你?x)明白。直接拷贝类的原型对象确实可以实现某U概念上的ѝ?br />但要注意Q在l承体系中,Man的原型对象属性方法最好不要用Man的实例属性(nameQ,因ؓ(f)可能Woman中ƈ没有定义实例属性name;也最好不要用Man)原型对象属性字D(typeQ?虽然type也被拯q来了,但D是”男人“?br />虽然有解军_法,但javascript没有很好的语法检查工P你用prototype.js的类l承时小心处理?/p>

b、prototype.js中的对象l承

prototype.js 1.3.1
this.options = {
      method:       'post',
      asynchronous: true,
      parameters:   ''
    }.extend(options || {});

q个应用比较单,典型的对象之间属性拷贝覆盖?br />ȝQ关于prototype.js中承的实现Q我们当成javascript对象的属性拷贝可能在应用中更好理解。徏议大家仔l读读prototype.js代码可能体会(x)更深。模仿prototype.js中extend的应用。感觉var Insertion = new Object(); 的实现比较经典?/p>

Q?Q、dojo-0.2.0-ajax中的l承

dojo.inherits  =   function (subclass, superclass)  {
  
if ( typeof  superclass  !=  ' function ')  
  dojo.raise( 
" superclass:  " + superclass + "  borken " );
 }
 
 subclass.prototype  
=   new  superclass();
 subclass.prototype.constructor  
=  subclass;
 subclass.superclass  
=  superclass.prototype;
  
//  DEPRICATED: super is a reserved word, use 'superclass' 
  subclass['super']  =  superclass.prototype;
     }
 

dojo的承实现比较正l,也是《javascript权威指南》中的实现方法。注意最后一句代码可以实现子c访问父cd型对象的Ҏ(gu)?br />

<SCRIPT LANGUAGE = "JavaScript"> 
 
<!-- 
 
  function  Man()  
{
     
this .name = 'zkj';
}
 
Man.prototype.type 
= '男h';
Man.prototype.getType 
= function ()  {
     
return   this .type;
}
 
  function  Woman()  
{} 
 
Woman.prototype  
=   new  Man();
Woman.prototype.constructor  
=  Woman;
Woman.superclass  
=  Man.prototype;
 
//  DEPRICATED: super is a reserved word, use 'superclass' 
 Woman['super']  =  Man.prototype;
Woman.prototype.type 
= '女h';

 var  man 
= new  Man();
 var  woman 
= new  Woman();
alert(man.getType());
alert(man.name);
alert(woman.getType());
alert(Woman.superclass.getType());
alert(woman.name);

// --> 
</SCRIPT> 

看看代码Q感觉؜乱?br />dojo一直没旉仔细读读代码。这部分详细讨论待箋?br />(3)、ȝ
关于javascript的承实玎ͼ一般不要用,感觉很ؕQ代码可L较差。一般也没有使用必要。详l在?、javascript对象使用指南》中讨论?br />



]]>
javascriptq阶之对象篇(4)构造函数、原型对?http://www.tkk7.com/zkjbeyond/archive/2006/04/17/41531.html原创专栏 开源学?/dc:creator>原创专栏 开源学?/author>Mon, 17 Apr 2006 15:12:00 GMThttp://www.tkk7.com/zkjbeyond/archive/2006/04/17/41531.htmlhttp://www.tkk7.com/zkjbeyond/comments/41531.htmlhttp://www.tkk7.com/zkjbeyond/archive/2006/04/17/41531.html#Feedback8http://www.tkk7.com/zkjbeyond/comments/commentRss/41531.htmlhttp://www.tkk7.com/zkjbeyond/services/trackbacks/41531.html如果看了上一节的最后一个例子,对自定义的“类”应该比较熟(zhn)了?br />在javascript中,可以说没有方法,因ؓ(f)函数和字W串一样也是种数据cdQ但cM的函数可以用this关键字。下面我说的cȝ属性可以是Ҏ(gu)Q也可以指字Dc(din)?br />在一个自定义“类”中有中有几个地方可以定义属性?br />   a?/strong>函数名中直接定义。?如Person.name。在q定义相当于cd的属性。静态的Q访问的时候必ȝPerson.name来访问,不能用new Person().name讉KQ也讉K不到?br />   b?/strong>构造函数的this.中。当你用new function()Ӟq些属性就是你所持对象的属性。用new Person().属性?来访问?br />   c?/strong>构徏好对象以后,l对象增加属性。和构造函C的属性用类伹{?br />   d?/strong>函数名的prototype?br />   e?/strong>父类或Object 的prototype中?/p>

(1)对象属性优先
通过q行以下代码Q我们访问对象属性优先如下Qc>b>d>e
cU属性必d定义以后讉K才有效。aU属性实例访问不到?br />javascrpt语言预定义的属性不能用for in 得到。如toString

<SCRIPT LANGUAGE = "JavaScript"> 
<!-- 
 Object.prototype.toString 
= function ()  {} ;
Object.prototype.name 
= " Object " ;
Object.prototype.porotype_name 
= " oObject " ;
Object.prototype.parent_name 
= " pObject " ;

Person.prototype.name 
= " Person " ;
Person.prototype.porotype_name 
= " oPerson " ;
 function  Person()  
{
     
this .name = 'Person实例';
}
 
 var  o 
= new  Person();
 
for ( var  key  in  o)  {
    alert(key 
+ ':' + o[key]);
}
 
// --> 
</ SCRIPT > 

(2)prototype属性是只读?/strong>
看如下代码,你不要试N过变量改变原型对象的属性。你也不可能改变Q你只会(x)通过c模式l对象增加一个属性?br />另外原型对象是所有实例共享的。理Z也不可以改变?/p>

<SCRIPT LANGUAGE ="JavaScript"> 
<!-- 
Person.prototype.name 
= " Person " ;
 function  Person()  
{
  
}
 
 var  o 
= new  Person();
 var  o1 
= new  Person();
alert(
'o.name:' + o.name + '  ' + 'o1.name:' + o1.name);
o.name 
= 'zkj';
alert(
'o.name:' + o.name + '  ' + 'o1.name:' + o1.name);
// --> 
</SCRIPT> 


]]>
javascriptq阶之对象篇(3)函数与自定义”类?/title><link>http://www.tkk7.com/zkjbeyond/archive/2006/04/17/41530.html</link><dc:creator>原创专栏 开源学?/dc:creator><author>原创专栏 开源学?/author><pubDate>Mon, 17 Apr 2006 15:07:00 GMT</pubDate><guid>http://www.tkk7.com/zkjbeyond/archive/2006/04/17/41530.html</guid><wfw:comment>http://www.tkk7.com/zkjbeyond/comments/41530.html</wfw:comment><comments>http://www.tkk7.com/zkjbeyond/archive/2006/04/17/41530.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/zkjbeyond/comments/commentRss/41530.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zkjbeyond/services/trackbacks/41530.html</trackback:ping><description><![CDATA[开始之前我先明个问题。如下代?br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"><</span><span style="COLOR: #000000">SCRIPT LANGUAGE </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">JavaScript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"> <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"><!--</span><span style="COLOR: #000000"> <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />Person.type </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> person </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> ;<br /><img id="Codehighlighter1_99_136_Open_Image" onclick="this.style.display='none'; Codehighlighter1_99_136_Open_Text.style.display='none'; Codehighlighter1_99_136_Closed_Image.style.display='inline'; Codehighlighter1_99_136_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_99_136_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_99_136_Closed_Text.style.display='none'; Codehighlighter1_99_136_Open_Image.style.display='inline'; Codehighlighter1_99_136_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />Person.writeType </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> function ()  </span><span id="Codehighlighter1_99_136_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_99_136_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    document.writeln( </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000"> .type);<br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"> <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /> </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> var Person = function(){}</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">如果q样定义?x)报?可以看看前面文章Q函数的预编译。?/span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_220_221_Open_Image" onclick="this.style.display='none'; Codehighlighter1_220_221_Open_Text.style.display='none'; Codehighlighter1_220_221_Closed_Image.style.display='inline'; Codehighlighter1_220_221_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_220_221_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_220_221_Closed_Text.style.display='none'; Codehighlighter1_220_221_Open_Image.style.display='inline'; Codehighlighter1_220_221_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #000000">  function  Person()  </span><span id="Codehighlighter1_220_221_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_220_221_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000"> <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />Person.writeType();<br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />alert( typeof (Person));<br /><img id="Codehighlighter1_299_317_Open_Image" onclick="this.style.display='none'; Codehighlighter1_299_317_Open_Text.style.display='none'; Codehighlighter1_299_317_Closed_Image.style.display='inline'; Codehighlighter1_299_317_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_299_317_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_299_317_Closed_Text.style.display='none'; Codehighlighter1_299_317_Open_Image.style.display='inline'; Codehighlighter1_299_317_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> ( var  key  in  Person)  </span><span id="Codehighlighter1_299_317_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_299_317_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    alert(key);<br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"> <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /> var  person </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">  Person();<br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> --> </span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"></</span><span style="COLOR: #000000">SCRIPT</span><span style="COLOR: #000000">></span></div>在这里Person是个函数Q但我们q可以定义它的属性(typeQ。而Person有Object实例的特?for in、可以定义属?Q但Person不是Object的实例?br /><br />见如下代码:(x)<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"><</span><span style="COLOR: #000000">SCRIPT LANGUAGE </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">JavaScript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"> <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"><!--</span><span style="COLOR: #000000"> <br /><img id="Codehighlighter1_81_103_Open_Image" onclick="this.style.display='none'; Codehighlighter1_81_103_Open_Text.style.display='none'; Codehighlighter1_81_103_Closed_Image.style.display='inline'; Codehighlighter1_81_103_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_81_103_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_81_103_Closed_Text.style.display='none'; Codehighlighter1_81_103_Open_Image.style.display='inline'; Codehighlighter1_81_103_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />Object.prototype.toString </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> function ()  </span><span id="Codehighlighter1_81_103_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_81_103_Open_Text"><span style="COLOR: #000000">{ </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">  </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">myToString</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"> ;<br /><img id="Codehighlighter1_128_131_Open_Image" onclick="this.style.display='none'; Codehighlighter1_128_131_Open_Text.style.display='none'; Codehighlighter1_128_131_Closed_Image.style.display='inline'; Codehighlighter1_128_131_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_128_131_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_128_131_Closed_Text.style.display='none'; Codehighlighter1_128_131_Open_Image.style.display='inline'; Codehighlighter1_128_131_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> function  Person()  </span><span id="Codehighlighter1_128_131_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_128_131_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"> <br /><img id="Codehighlighter1_176_194_Open_Image" onclick="this.style.display='none'; Codehighlighter1_176_194_Open_Text.style.display='none'; Codehighlighter1_176_194_Closed_Image.style.display='inline'; Codehighlighter1_176_194_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_176_194_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_176_194_Closed_Text.style.display='none'; Codehighlighter1_176_194_Open_Image.style.display='inline'; Codehighlighter1_176_194_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> Person.prototype.toString </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> function ()  </span><span id="Codehighlighter1_176_194_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_176_194_Open_Text"><span style="COLOR: #000000">{ </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">  </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">Person</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"> ;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /> var  o </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">  Person();<br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />alert(o);<br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />alert(Person)<br /><img id="Codehighlighter1_279_306_Open_Image" onclick="this.style.display='none'; Codehighlighter1_279_306_Open_Text.style.display='none'; Codehighlighter1_279_306_Closed_Image.style.display='inline'; Codehighlighter1_279_306_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_279_306_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_279_306_Closed_Text.style.display='none'; Codehighlighter1_279_306_Open_Image.style.display='inline'; Codehighlighter1_279_306_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />Person.toString </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> function ()  </span><span id="Codehighlighter1_279_306_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_279_306_Open_Text"><span style="COLOR: #000000">{ </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">  </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">Person toString</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"> ;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />alert(Person)<br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> --> </span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"></</span><span style="COLOR: #000000">SCRIPT</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"> <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /> </span></div><p>我理解functionq回的数据类型是和Object同等U的数据cd。它有Object实例Qnew Object()Q的一些特?但它不是Object的实例,因ؓ(f)它没有承Object.prototype.toString=function(){return 'myToString'};但我们Person.toString=function(){return 'Person toString'};改变了覆盖了Ҏ(gu)?br />在《javascript权威指南》中Q作者用q个Ҏ(gu)实C“类Ҏ(gu)、类变量”staticҎ(gu)Q与java中不同,q些Ҏ(gu)不能用new Person()来调用?/p><p><strong>Object                   function             同等U?function可以定义属性,可以(for in)</strong></p><p><strong>new Object()        new function()    同等U?new function()l承了Object的prototype,                                                      也会(x)l承 function的prototype<br /></strong></p><p>例子。看了原型对象就很清楚了啊?原型对象最好在代码最前面定义Q很Ҏ(gu)被覆盖啊Q?br /><br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"><</span><span style="COLOR: #000000">SCRIPT LANGUAGE </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">JavaScript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"> <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"><!--</span><span style="COLOR: #000000"> <br /><img id="Codehighlighter1_70_231_Open_Image" onclick="this.style.display='none'; Codehighlighter1_70_231_Open_Text.style.display='none'; Codehighlighter1_70_231_Closed_Image.style.display='inline'; Codehighlighter1_70_231_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_70_231_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_70_231_Closed_Text.style.display='none'; Codehighlighter1_70_231_Open_Image.style.display='inline'; Codehighlighter1_70_231_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">  Person </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">  ()  </span><span id="Codehighlighter1_70_231_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_70_231_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />     </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000"> .name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> 'Person的构造函C属性name';<br /><img id="Codehighlighter1_146_180_Open_Image" onclick="this.style.display='none'; Codehighlighter1_146_180_Open_Text.style.display='none'; Codehighlighter1_146_180_Closed_Image.style.display='inline'; Codehighlighter1_146_180_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_146_180_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_146_180_Closed_Text.style.display='none'; Codehighlighter1_146_180_Open_Image.style.display='inline'; Codehighlighter1_146_180_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />     </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000"> .getName </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> ()  </span><span id="Codehighlighter1_146_180_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_146_180_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />          </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">   </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000"> .name;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> }</span></span><span style="COLOR: #000000"> <br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> this.toString=function(){}  //你把注释L看看效果 </span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="COLOR: #000000"> }</span></span><span style="COLOR: #000000"> <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />Person.name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> Person </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> ;<br /><img id="Codehighlighter1_292_322_Open_Image" onclick="this.style.display='none'; Codehighlighter1_292_322_Open_Text.style.display='none'; Codehighlighter1_292_322_Closed_Image.style.display='inline'; Codehighlighter1_292_322_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_292_322_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_292_322_Closed_Text.style.display='none'; Codehighlighter1_292_322_Open_Image.style.display='inline'; Codehighlighter1_292_322_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />Person.toString </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> ()  </span><span id="Codehighlighter1_292_322_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_292_322_Open_Text"><span style="COLOR: #000000">{ </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">   </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000"> .name </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> '的类Ҏ(gu)'}</span></span><span style="COLOR: #000000"> ; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 我可以用this啊?/span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"> alert(Person.toString()) </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> cL法?/span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">  o </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">  Person();<br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />alert(o.getName()); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 构造函C的方法?/span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"> alert(o); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 讉KtoStringҎ(gu)   先找  对象中 构造函C   Person的prototype中       Object的prototype中?/span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_563_601_Open_Image" onclick="this.style.display='none'; Codehighlighter1_563_601_Open_Text.style.display='none'; Codehighlighter1_563_601_Closed_Image.style.display='inline'; Codehighlighter1_563_601_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_563_601_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_563_601_Closed_Text.style.display='none'; Codehighlighter1_563_601_Open_Image.style.display='inline'; Codehighlighter1_563_601_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #000000">  Object.prototype.toString </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> ()  </span><span id="Codehighlighter1_563_601_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_563_601_Open_Text"><span style="COLOR: #000000">{ </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">  'Object的prototype中的toString'}</span></span><span style="COLOR: #000000"> ;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />alert(o); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Object的prototype中?/span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_680_717_Open_Image" onclick="this.style.display='none'; Codehighlighter1_680_717_Open_Text.style.display='none'; Codehighlighter1_680_717_Closed_Image.style.display='inline'; Codehighlighter1_680_717_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_680_717_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_680_717_Closed_Text.style.display='none'; Codehighlighter1_680_717_Open_Image.style.display='inline'; Codehighlighter1_680_717_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #000000">  Person.prototype.toString </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> ()  </span><span id="Codehighlighter1_680_717_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_680_717_Open_Text"><span style="COLOR: #000000">{ </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">  'Person的prototpe中的toString'}</span></span><span style="COLOR: #000000"> ;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />alert(o);<br /><img id="Codehighlighter1_757_785_Open_Image" onclick="this.style.display='none'; Codehighlighter1_757_785_Open_Text.style.display='none'; Codehighlighter1_757_785_Closed_Image.style.display='inline'; Codehighlighter1_757_785_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_757_785_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_757_785_Closed_Text.style.display='none'; Codehighlighter1_757_785_Open_Image.style.display='inline'; Codehighlighter1_757_785_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />o.toString </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> ()  </span><span id="Codehighlighter1_757_785_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_757_785_Open_Text"><span style="COLOR: #000000">{ </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">  '我覆盖了toStringҎ(gu)了啊'}</span></span><span style="COLOR: #000000"> <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />alert(o);<br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />alert('我不能访问前面的toString了。如果有super好了!');<br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /> </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 其实q是可以讉K到被覆盖的原型的。那样太复杂了。?/span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />//</span><span style="COLOR: #008000"> --> </span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"></</span><span style="COLOR: #000000">SCRIPT</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"> <br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span></div><p><br /></p><img src ="http://www.tkk7.com/zkjbeyond/aggbug/41530.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zkjbeyond/" target="_blank">原创专栏 开源学?/a> 2006-04-17 23:07 <a href="http://www.tkk7.com/zkjbeyond/archive/2006/04/17/41530.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascriptq阶之对象篇 (2)大家熟?zhn)的javascript对象http://www.tkk7.com/zkjbeyond/archive/2006/04/17/41527.html原创专栏 开源学?/dc:creator>原创专栏 开源学?/author>Mon, 17 Apr 2006 15:03:00 GMThttp://www.tkk7.com/zkjbeyond/archive/2006/04/17/41527.htmlhttp://www.tkk7.com/zkjbeyond/comments/41527.htmlhttp://www.tkk7.com/zkjbeyond/archive/2006/04/17/41527.html#Feedback0http://www.tkk7.com/zkjbeyond/comments/commentRss/41527.htmlhttp://www.tkk7.com/zkjbeyond/services/trackbacks/41527.html < SCRIPT LANGUAGE  =   "  JavaScript  " >  
<!--  
Object.prototype.toString 
=  function ()   return    ' myToString ' }  ;
 var  o 
=   new   Object();
o.name 
=   ' zkj ' ;
o.age 
=   25  ;
o.desc 
=  function ()   return    ' 姓名Q?/span> '   +   this  .name  +   ' ,q龄: '   +   this  .age}  ;
 
for  ( var  key  in  o)   {
    alert(key 
+   ' : '   +  o[key]  +   '  type: '   +  typeof (o[key]))
  
if  ( typeof (o[key])  ==   '  function  ' )   {
        alert(
' 执行Ҏ(gu)keyQ?/span> '   +  (o[key])())
 }
 
}
 
alert(o);
alert( 
new   Date());
 
//  --> 
  </ SCRIPT >      
< SCRIPT LANGUAGE  =   " JavaScript " >  
<!--  
 Object.prototype.toString 
=  function ()   return    ' myToString ' }  ;
 function  person()  
{

}
 
 var  o 
=   new   person();
o.name 
=   ' zkj ' ;
o.age 
=   25  ;
o.desc 
=  function ()   return    ' 姓名Q?/span> '   +   this  .name  +   ' ,q龄: '   +   this  .age}  ;
 
for  ( var  key  in  o)   {
    alert(key 
+   ' : '   +  o[key]  +   '  type: '   +  typeof (o[key]))
  
if  ( typeof (o[key])  ==   '  function  ' )   {
        alert(
' 执行Ҏ(gu)keyQ?/span> '   +  (o[key])())
 }
 
}
 
alert(o);
alert( 
new   Date());
 
//  --> 
  </ SCRIPT >  

看以上两D代码,估计很多人对后面的代码熟(zhn),也这样写了。可他们执行l果是一L(fng)。如果你改变了javascript对象的原型对象后?x)有些区别?br />在这我想提出以下几个问题Q?br />    a、javascript对象也是单根l承的对?但不是所有对象都l承自Object.如例子中的Date对象?br />    b、千万别乱定义Object.prototype原型对象。prototype.js中加了个extends被h说了半天。但我们自己写类库时Q千万别试改Object的prototype?br />    c、别用javacript语言模仿java来写代码。想上面的,需要一个person的“类”,q不是非需要定义一个,注意javascript对象的属性是可以随意增加或删除的。ƈ不象java那样在类中写歅R?br />    d、就上面两段代码有什么区别呢Q可以简单的说是personl承了Object”类“。javascript中对象的l承是用prototype来实现的Q后面我们讨论prototype原型对象?br />    e、那我们应用的时候到底是否该自己定义自己的构造函敎ͼ如personQ?q是直接使用Object呢?q是个复杂的问题Q我个h来说喜欢多用Object.


]]>
javascriptq阶之对象篇(1) javascript中有那些对象http://www.tkk7.com/zkjbeyond/archive/2006/04/17/41525.html原创专栏 开源学?/dc:creator>原创专栏 开源学?/author>Mon, 17 Apr 2006 14:58:00 GMThttp://www.tkk7.com/zkjbeyond/archive/2006/04/17/41525.htmlhttp://www.tkk7.com/zkjbeyond/comments/41525.htmlhttp://www.tkk7.com/zkjbeyond/archive/2006/04/17/41525.html#Feedback0http://www.tkk7.com/zkjbeyond/comments/commentRss/41525.htmlhttp://www.tkk7.com/zkjbeyond/services/trackbacks/41525.html   b、javascript预定义的对象。Function Array Date   RegExp  Error{对象。这些对象用比较简单,也不讨论了?br />   c、用new Object()创徏的对象。等同与var o={a:0,b:'s'};
   d、用自定义的构造函数创建的对象。function O(){};  var o=new O();
   e、dom模型定义的构造函敎ͼ览器ؓ(f)你创建的对象。用var o=document.getElementById();或其他方法获得?br />   f、null也是对象。typeof(null)= object.undefined我理解ؓ(f)变量预编译的初始化|而null是特D的对象。如果一个变?null,说明q个变量是个对象Q但不是我上面提到的M来源方式的对象?如document.getElementById(面中不存在的id);可以产生一个null对象?

   用typeof()  Ҏ(gu)q回的是 object 的变量都是对象?Function除外用new定义的不一定都是对象。?



]]>
javascriptq阶之对象篇(6)Objectcd型对象的属性和Ҏ(gu)http://www.tkk7.com/zkjbeyond/archive/2006/04/16/41336.html原创专栏 开源学?/dc:creator>原创专栏 开源学?/author>Sun, 16 Apr 2006 08:15:00 GMThttp://www.tkk7.com/zkjbeyond/archive/2006/04/16/41336.htmlhttp://www.tkk7.com/zkjbeyond/comments/41336.htmlhttp://www.tkk7.com/zkjbeyond/archive/2006/04/16/41336.html#Feedback0http://www.tkk7.com/zkjbeyond/comments/commentRss/41336.htmlhttp://www.tkk7.com/zkjbeyond/services/trackbacks/41336.htmljavascript所有对象都l承自ObjectcR以下是Objectcȝ一些属性。原型对?/p>

的一些属性?/p>

1、constructor属?br />从javascript1.1开始,每个对象都有q个属性,它指向用来初始化改对象的构?/p>

函数

 

< SCRIPT LANGUAGE = " JavaScript " >
<!--
function  Person() {}
var  o = new  Person();

alert(
typeof (Person.constructor));
alert(o.constructor);
alert(Person.constructor);
alert(Function.constructor);
alert(Object.constructor)

alert(
new  Date().constructor);
alert(Date.constructor);


function  Man() {

}

Man.prototype
= new  Person();
alert(Man.constructor);
o
= new  Man();
alert(o.constructor)
Man.prototype.constructor
= Man;
alert(o.constructor)
// -->
</ SCRIPT >

 

如以上代码,可以知道
a、constructor的类型是函数Q?br />b、javascript内部实现了很多函敎ͼ如Object,Date都是函数由Function得到?/p>

?br />c、用原型对象实现的承中Q也要设|子cȝconstructor。如果你的程序中?/p>

CconstructorQ可能会(x)出错?br />2、toString()Ҏ(gu)
相当于java ObjectcMtoStringҎ(gu)。你alert()  + {操作中׃(x)调用q个?/p>

法?var s='1'+'2',?x)自动?1'  '2'  转化成String对象在执行?/p>

但数l定义自qtoStringҎ(gu)。alert(Array.prototype.toString)

如果对象或子c要调用父类的方法可?/p>

 

< SCRIPT LANGUAGE = " JavaScript " >
<!--
alert([
1 , 2 , 3 ].toLocalString())
alert(Object.prototype.toString.apply([
1 , 2 , 3 ]));
// -->
</ SCRIPT >

 

3、toLocalString()Ҏ(gu)
ECMAScript v3 javascript1.5中定义了q个Ҏ(gu)。返回局部化的倹{偶q不知道

什么用法?br />4、valueof()
当javascript与要一个对象{化成字符串之外的原始cd时调用它?/p>

5、hasOwnProperty()Ҏ(gu)
《javascript权威指南》说如果是非l承的属性返回true.但下列代码反映,它检

验对象的实例属性。对原型属性不?x)返回?/p>

 

< SCRIPT LANGUAGE = " JavaScript " >
<!--
function  Person(name) {
    
this .name = name;
}

Person.prototype.setAge
= function (age) {
    
this .age = age;
}

Person.prototype.toString
= function () {
    
return  'name:' + this .name + ' age:' + this .age;
}

var  o = new  Person('zkj');
o.setAge(
25 );
alert(o)
alert(o.hasOwnProperty(
" name " ));
alert(o.hasOwnProperty(
" age " ));
alert(o.hasOwnProperty(
" setAge " ));
alert(o.hasOwnProperty(
" toString " ));

alert(Person.prototype.hasOwnProperty(
" setAge " ));
// -->
</ SCRIPT >



6、propertyIsEnumerable
《javascript权威指南》如果用?for( in )枚D的属性,q个Ҏ(gu)q回true;
以下代码说明《javascript权威指南?font color="#ff3300">是错?/font>。自己定义的原型对象属性可以枚

举,但返回false

 

< SCRIPT LANGUAGE = " JavaScript " >
<!--
function  Person(name) {
    
this .name = name;
}

Person.prototype.setAge
= function (age) {
    
this .age = age;
}

Person.prototype.toString
= function () {
    
return  'name:' + this .name + ' age:' + this .age;
}

var  o = new  Person('zkj');
o.setAge(
25 );
alert(o.propertyIsEnumerable('setAge'));
var  desc = '';
for ( var  key  in  o) {
    desc
+= key + '  ';
    
if (o.hasOwnProperty(key)) {
        desc
+= ' 是实例对象?;
 }
else {
        desc
+= ' 不是实例对象 ';
 }

 
if (o.propertyIsEnumerable(key)) {
        desc
+= ' 能被枚D ';
 }
else {
        desc
+= ' 不能被枚举?;
 }


 desc
+= '\r\n';
}

alert(desc);

// -->
</ SCRIPT >



7、isPrototypeOfҎ(gu)
《javascript权威指南》如果调用对象是实际参数指定的对象的原型对象q回

true. 看代码吧?br />居然alert(Object.prototype.isPrototypeOf(Person));//true也是true.搞不?br />

 

< SCRIPT LANGUAGE = " JavaScript " >
<!--
function  Person(name) {
    
this .name = name;
}

Person.prototype.setAge
= function (age) {
    
this .age = age;
}

Person.prototype.toString
= function () {
    
return  'name:' + this .name + ' age:' + this .age;
}

var  o = new  Person('zkj');
o.setAge(
25 );
alert(Person.prototype.isPrototypeOf(o));
// true
alert(Person.isPrototypeOf(o)); // false
alert(o.isPrototypeOf(Person.prototype)); // false
alert(Function.prototype.isPrototypeOf(Person)); // true
alert(Object.prototype.isPrototypeOf(Person)); // true
//
-->
</ SCRIPT >


 

8、ȝ
看《javascript权威指南》前Q就知道toStringҎ(gu)。现在知道了些其他的Ҏ(gu)

Q但让我更加混ؕQ《javascript权威指南》讲的也有错误。开发中大家?/p>

了toString,其他属性方法不要覆盖也不要使用了。除了对q些Ҏ(gu)十分清楚。就

我知道的javascript开源框架中好象没用到这些?br />



]]>
javascriptq阶之函数篇 http://www.tkk7.com/zkjbeyond/archive/2006/04/06/39514.html原创专栏 开源学?/dc:creator>原创专栏 开源学?/author>Thu, 06 Apr 2006 01:22:00 GMThttp://www.tkk7.com/zkjbeyond/archive/2006/04/06/39514.htmlhttp://www.tkk7.com/zkjbeyond/comments/39514.htmlhttp://www.tkk7.com/zkjbeyond/archive/2006/04/06/39514.html#Feedback0http://www.tkk7.com/zkjbeyond/comments/commentRss/39514.htmlhttp://www.tkk7.com/zkjbeyond/services/trackbacks/39514.html      在javascript中,function作ؓ(f)一个关键字有两斚w的应用?br />     a、可以定义函数?br />     b、可以定义一个数据类型。这里只介绍函数。关于function定义cȝ功能在对象中介绍?br />1、函数的概念
    javascript中提供了许多预定义函敎ͼ我们可以直接使用Q比如Math.sin();eval(){?br />我们也可以定义自q函数。有以下四种Ҏ(gu)Q?/p>

a、function add(x,y){return x+y;}
b、var add = function(x,y){return x+y;}
c、var add = new Function("x","y","return x+y;");
d、var add =function a(x,y){return x+y;}

在这Q如果用add(2,3);调用Q返回的l果都是5。但它们使用有很大的区别Q后面在详细解释?br />
2、函数的参数
     回想上一提到函数的调用对象。虽然我们不能访问它Q看不见Q但引入q个概念实可以方便我们解释很多东西?br />     在一个函C内,标识Warguments有特D含义。它是调用对象的一个特D属性?br />

< SCRIPT LANGUAGE = " JavaScript " >
function  add(x,y) {
document.writeln('x
= ' + x);
document.writeln('y
= ' + y);
document.writeln('arguments[
0 ] = ' + arguments[ 0 ]);
document.writeln('arguments[
1 ] = ' + arguments[ 1 ]);
arguments[
0 ] = 11 ;
document.writeln('arguments[
0 ] = ' + arguments[ 0 ]);
return  x + y;
}

document.writeln(add(
2 , 3 ));
</ SCRIPT >

     看例子,基本你可以把arguments当成个数l用,但ƈ不是真正的数l?br />    虽然arguments.length and arguments[index]可以在函数内改变Q但你不要在函数内改变它们。关于arguments的具体用法可以看prototype.js.
argumentsq有个属?callee.引用当前正在执行的函数?/p>

 

< SCRIPT LANGUAGE = " JavaScript " >
function  add(x,y) {
    document.writeln(arguments.callee);
    document.writeln(
typeof (arguments.callee));
    
return  x + y;
}

document.writeln(add);
document.writeln(
typeof (add));
document.writeln('
</ br >-----------------------</ br > ');
add();
</ SCRIPT >

3、函数是一U数据类?/strong>
    在javascript中,函数不但能象java一样当成语a的语法特性,q可以象字符丌Ӏ数字、日期一样当成一U数据?br />    var add=function(x,y){return x+y;};其实我们函数的定义都是把函数附值给变量。函C但可以附值给变量Q还可以当成参数传递?/p>

 

< SCRIPT LANGUAGE = " JavaScript " >
var  add = function (x,y) { return  x + y;} ;
var  fun = add;
function  opetate(fun,x,y) {
    
return  fun(x,y);
}

alert(opetate(fun,
2 , 3 ));
</ SCRIPT >

 

其实javascript的熟手不?x)在全局变量里(直接在js文g中)定义函数Q都?x)定义在全局变量的属性字D中。如

 

< SCRIPT LANGUAGE = " JavaScript " >
  
var  MyLib = {} ;
  MyLib.fun1
= function () {} ;
  MyLib.fun2
= function () {} ;
  alert(MyLib);
  alert(MyLib.fun1);
</ SCRIPT >

如果q种写法Q我们就基本不会(x)和别人写的程序发生命名上的冲H了?/p>

4、函数的生命周期
    在变量里我们知道函数有个预编译过E,q个q程我们也看C刎ͼ另外函数定义不同写法情况也不同。所以,感觉函数的执行过E很是复杂?/p>

 

< SCRIPT LANGUAGE = " JavaScript " >
  fun1();
  alert(fun1);
// ///////////把以下代码放到定义最后面可以执行?/span>
  fun2();
  alert(fun2)
  fun3();
  alert(fun3)
  
// /////////////////////////
   function  fun1() {document.writeln('fun1 run ! ')}
  
var  fun2  = function () {document.writeln('fun2 run ! ')} ;
  
var  fun3  = new  Function( " document.writeln('fun3 run!') " );
</ SCRIPT >


a、javascript预编译过E?/strong>Q在html中, </head>前后,<body>内外有特D情况,q指U?js文g中)
    javascript的预~译我认为是个很单的q程Q对于解释执行语aQ肯定不?x)编译成什么中间语a。(我认为)q程如下Q?br />    首先Qؓ(f)执行环境Q一个html也,框架环境下有几个执行环境Q徏立徏立一个全局对象Q一般客L(fng)脚本?window或global对象。(在这我觉得global好理解,因ؓ(f)览器会(x)攑օwindowd他的属性)
    然后Q检查某环境中根代码块中Q非函数或{}中)var关键字,把这些变量设|成global对象的属性,q初值undefined.
   如果q程中遇到直接定义的函数Qfun1的定义)Q那么把fun1讄成global对象的属性,q初值函数的定义Q你可以把函数当成undefined,true,1,'1'{数据类型)?br />b、解释执行过E?br />   代码按照序执行Q?br />   一般我们把全局变量的俯值放C码最前面Q如var s="hello";  那么把s的值用 'hello'替换预编译过E的undefined?br />   如果遇到变量的应用,如代码?document.writeln(a)Q如果我们在global扑ֈ属性a,看a是否在前面代码俯DQ如果没有,a的gؓ(f)预编译的undefined。如果是隐式变量声明Q在q把它添加到global的属性中厅R?br />   如果遇到cMvar fun=function(){}; 把函数当成数据赋值给变量fun.
c、函数的调用q程
   你运行一下以下代码,Z么结果是 test undefined local

< SCRIPT LANGUAGE = " JavaScript " >
var  s = " golbe " ;
function  fun(s) {
    document.writeln(s);
    document.writeln(a);
    
var  s = " local " ;
    
var  a = "" ;
    
return  s;
}

document.writeln(fun(
" test " ));
</ SCRIPT >

 

首先Q预~译代码Q把s、fun讄为golbe的属性,q赋值s=undefined,fun=函数定义Q可以直接调用)?br />然后Q按照顺序解释执行代码。赋值s="golbe";   函数已经可以直接调用了?br />执行函数Q当q行到fun("test")Ӟ开始函数调用?br />       先ؓ(f)本次调用建立一个调用对象(fun-globalQ?br />       预编译函C内代码,把参数设|ؓ(f)fun-global的属性,gؓ(f)Z入?test",查找varQ把a讄成fun-global的属性,gؓ(f)undefined.(如果var s与参数名U相同,则不重复讄例如函数体内var s="local";)
      按照序执行函数内代码,当代码中遇到变量Q先从调用对象属性中查找Q如果找到直接用。遇到var s="local";Ӟ代码?x)覆盖调用对象中属性|和参数名U相同)

调用对象是个暂时对象Q生命周期很短,只有在调用过E中存在Q递归可能?x)徏立多个独立的调用对象?
javascript的函数应该和java中一hU程安全的吧?/span> 

5、函数的属性和Ҏ(gu)
a、length
看了以下代码一目了?dng)函数的length代表函数实际需要的参数个数?br />

< SCRIPT LANGUAGE = " JavaScript " >
function  add(x,y) {
    
var  actual = arguments.length;
    
var  expected = arguments.callee.length;
    
if (actual != expected) {
        
throw   new  Error('函数需? + expected + '个参敎ͼ你输入了' + actual + '?);
    }

    
return  x + y;
}

alert(add(
3 , 2 ));
alert(add(
3 , 2 , 3 ));
</ SCRIPT >

b、prototype
q个属性引用的是预定义的原型对象,只有在new 函数?才有效。讲解对象时介绍?br />c、定义自q函数属?br />

< SCRIPT LANGUAGE = " JavaScript " >
add.count
= 0 ;
function  add(x,y) {
    add.count
++ ;
    
return  x + y;
}

add(
3 , 2 );
add(
3 , 2 );
add(
3 , 2 );
add(
3 , 2 );
document.writeln('p用函数几ơ:(x)'
+ add.count);
</ SCRIPT >


d、apply() call()Ҏ(gu)
去读读prototype.js吧?/p>

]]>
javascriptq阶之变量篇http://www.tkk7.com/zkjbeyond/archive/2006/03/30/38191.html原创专栏 开源学?/dc:creator>原创专栏 开源学?/author>Thu, 30 Mar 2006 01:33:00 GMThttp://www.tkk7.com/zkjbeyond/archive/2006/03/30/38191.htmlhttp://www.tkk7.com/zkjbeyond/comments/38191.htmlhttp://www.tkk7.com/zkjbeyond/archive/2006/03/30/38191.html#Feedback4http://www.tkk7.com/zkjbeyond/comments/commentRss/38191.htmlhttp://www.tkk7.com/zkjbeyond/services/trackbacks/38191.html 1、关于变量的声名
大家都知道javascript是可以隐式声名变量的。但要注意,隐式声名变量L被创Zؓ(f)全局变量。看以下代码Q情愿javascript语言强制声明变量。徏议大家一定要var声明变量?br /><SCRIPT LANGUAGE="JavaScript">
function test(){
    var a=222;
 document.writeln(a);
}
test();
document.writeln(a);
</SCRIPT>

<SCRIPT LANGUAGE="JavaScript">
function test(){
    a=222;
 document.writeln(a);
}
test();
document.writeln(a);
</SCRIPT>

2、关于变量的作用?/font>
猜猜以下代码输出什么?br /><SCRIPT LANGUAGE="JavaScript">
var x='000';
document.writeln(x);
a();
function a(){
    var x='aaa';
 function b(){
     document.writeln(x);
        var x='bbb';
  document.writeln(x);
 }
 b();
    document.writeln(x);
}
</SCRIPT>
如果你的{案是 ?000 undefined bbb aaa。恭喜,ok.当代码用到x变量Ӟ先从函数块(权威指南中用调用对象来解释)中找Q如果找不到Q从上一U函数块找,直到扑ֈQ如果知道顶层代码(指var x='000';的位|)q没扑ֈ定义Q代码会(x)报未定义错误?/p>

改一下代码,得到 000 undefined 111 111
<SCRIPT LANGUAGE="JavaScript">
var x='000';
document.writeln(x);
a();
function a(){
 function b(){
     document.writeln(x);
  document.writeln(x);
 }
 document.writeln(x);
 var x='111';
 b(); 
}
</SCRIPT>
3、新的问?/font>
变量个作用域清楚了,注意上面的代码。ؓ(f)什么我的function a()定义以前可以调用a函数了,而我的var x='111';前“不可以用”x啊?Q?
让我把我的理解一一道来
首先Q以下代码让我相信javascript有个预编译过E,不是完全按照序解释执行的?br /><SCRIPT LANGUAGE="JavaScript">
a();
function a(){
    alert();
}
</SCRIPT>

  个h理解q个预编译过E不?x)象java/c#那样把代码编译成虚拟识的语言Q更不会(x)象vbQvc那样~译成更底层的语a。猜惛_是把q个函数预装载到q段函数执行的全局环境中,在这个执行环境中Q该函数被标识定义过Q可以直接用了。(看到|上很多人写的AOP的javascript实现,其实q个预编译过E才是翻译元数据最x候,可惜javascript语言来讲Q是有些落伍了)

q个文章主要讲变量的一些问题。变量说了,Z么函数可以,我变量就不可以呢?br /><SCRIPT LANGUAGE="JavaScript">
document.writeln(a);
var a=0;
</SCRIPT>

Z么我要输出undefined呢?Z么我a׃可以预编译一把呢Q?br />大家看看以下两段代码?x)输Z么呢啊?Q?
<SCRIPT LANGUAGE="JavaScript">
document.writeln(a);
a=0;
</SCRIPT>

<SCRIPT LANGUAGE="JavaScript">
document.writeln(a);
</SCRIPT>

可能你运行试了,可能你本来就知道Qa未定义。哈哈哈Q好了?br />现在我确信var a=0;被javascript解释器“预~译q”,臛_是记录下来了。甚x它的D|ؓ(f) undefined。“undefined”这个词名字取的很是让h误解Q怎么能叫未定义呢Q分明是javascript中所有变量的初始化倹{关于null与undefined的比较我实在不愿提了?br />注意上面两段代码q反映一个现象。隐式声明的变量是在解释的时候才把自己定义ؓ(f)全局变量的?/p>

关于函数与变量javascript预编译的不同处理Q大家可以与java class的加载过E比较下。java也是对基本类型设出|对象为null的。(不往q扯了)
4、区别未定义变量和未附值变?br /><SCRIPT LANGUAGE="JavaScript">
var a;
document.writeln(a);
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
document.writeln(a);
</SCRIPT>
未定义变量和未附值变量 ?权威指南中文?定义的。通过W三条分析,我觉得变量就应该以 ?定义和未定义变量区别。未附值变量和undefined有点冲突Qjavascript不是强类型语aQ没发附默认|才来了个undefined?br />5、基本类型和引用cd
熟?zhn)java的朋友可能这部分很清楚。没?br />说头?br />6、javascript的垃圑֛?/font>
关于q部分内容一直没见着个权威说法。在javascript权威指南中有两小节提到这个问题?br />对于字符丌Ӏ对象、数据这些没有固定大,必须为它们动态的分配内存Q但什么时候回收这些内存呢Qjavascript使用和java一L(fng)garbage collection的方法?br />var s="hello";
var u=s.toUpperCase();
s=u;

q行q段代码后,"hello"没有变量?x)再用到他,q是"hello"的存储空间的被垃圑֛收了。对于javascript的垃圑֛Ӟ你唯一要关心的是,它一定会(x)q行Q不要对内存担心?br />注意Qjavascript不提供Q何的强制垃圾回收或释攑ֆ存的q算附或语句?br />javascript的deleteq算附和C++中的不同?br /><SCRIPT LANGUAGE="JavaScript">
var o=new Object();
o.name="zkj";
o.age=25;
o.bir=new Date();
for(var key in o){
document.writeln(key+':'+o[key]+'</br>');
}
document.writeln('delete o.bir</br>');
delete o.bir;
for(var key in o){
document.writeln(key+':'+o[key]+'</br>');
}
</SCRIPT>
7、作为属性的变量
猜猜以下代码?x)输Z么?br /><SCRIPT LANGUAGE="JavaScript">
var x=100;
document.writeln(x);
add(x);
document.writeln('</br>------------------------</br>');
var x=200;
document.writeln(x);
add(x);
function add(x){
    document.writeln(x);
    var x=300;
    document.writeln(x);
    var x=400;
    document.writeln(x);
}
</SCRIPT>
估计很多得出正确{案
100 100 300 400
------------------------
200 200 300 400
但这里我惛_入?全局对象和调用对象的 概念Qjavascript权威指南是这么翻译滴Q?br /><SCRIPT LANGUAGE="JavaScript">
var x=100;   //我们在全局对象中加了个属性x. Ҏ(gu)
 //var o=new Object();o.x=100;
document.writeln(this.x);//用this讉K全局对象
add(this.x);//把全局对象的属性g递对函数?br />document.writeln('</br>------------------------</br>');
this.x=200;//把全局变量中的x属性修Ҏ(gu)
document.writeln(window.x);
add(window.x);
function add(x){
    //假设有个局部对象,调用对象Q函数调用过E中的对?br />//  temp   temp.x=${传入的值}
    document.writeln(x); //哦这打印的可是参C的|也就是temp.x=this.x
//的?
    var x=300;//把调用对象变量的{֐l覆盖了.
    document.writeln(x); //打印修改q的倹{?temp.x
 var x=400;//temp.x=400
    document.writeln(x);
}
</SCRIPT>

在函数的调用q程中,假设有个调用对象存在Q把函数的参敎ͼ和函数内的(f)时变量当成这个调用对象的属性。当然这个调用对象的生命周期很短?br />注意Q当我们讉K全局变量的属性入x的时候,不必要用this.x 或window.x讉KQ当在有<frame><iframe>的页面时?x)出现؜淆?br />关于函数的详l讨论我后箋?x)详l讨论?br />



]]>
վ֩ģ壺 wwww߹ۿ| ޳aƬ߹ۿ| һд| ¼ҳ| һëƬѿѲ| 18ڵվ | ˻18س˻18Ƶ| ƷɫҹƵ| AVһDV| һavĻ| ھƷ99Ѹ| Ʒһ| Ļ˳޵Ӱ| ɫƵwww| ߿Ƭ˳Ƶ| x8| AVպAV뵼| av뾫Ʒ| վ18ѹۿ| Ʒ| ޹þþþþþ| Ծ޾ƷAAƬ߲| 999þþѾƷ| ëƬavպav| ˳| ѹۿ91Ƶ| ޾Ʒ99߹ۿ| ɫ˵| þùƷѹۿ| ߹ۿ| ޺ݺۺϾþ| ŷƵһ| ɫ͵С˵| gayˬˬƵ| 鶹һѲվ| ޹Ʒþһ| Ƶ| ƷƵƵѿ| av| һػaaëƬѹۿ| ĻƷ |