2011年3月28日 星期一

物件原型 prototyping

1.prototype是Object的屬性,每一個javascript的物件都有這個屬性。

你可以利用它擴展物件的屬性和方法

包括String、Number這些基礎型別

    例一( 以javascript本生的基礎型別示範 ):

        替String加一個method : trim( )
        //用來去掉字字串前後的空白

        String.prototype.trim=function()
        {
            return (this.replace( /^[\s\xA0]+/ , "" ).replace( /[\s\xA0]+$/,""));
        }

        var sObj=new String("    This is the string      ");

        sTet=sObj.trim();

        document.writeIn("__"+sTet+"__");

     例二(自訂物件的原型範例)

        在javascript中,自訂一個function就是撣於建立一個物件

        function someObject ( ) 
        {
            this.method1=objMethod1;
        }
        function objMethod1( ) 
        {
            ....
        }
        //容易了解的寫法

        鏈式建構函式(chaining constructor)

        function Tune( title )
        {
            this.title=title;
        }
        //定義Tune物件

        function    printTitle ( )
        {
            alert(this.title);
        }
        //定義Tune物件要指派的print方法   printTitle 方法
        
        var someTune=new Tune("Title");
        Tune.prototype.print = printTitle;
        
        //使用Tune物件
        //指定Tune的prototype屬性會有一個print方法,並且把剛剛定義好的printTitle方法指派給他

        ----------定義完畢-----------

        var anotherTune = new Tune( " Another " );

       anotherTune.print( )

2."this"指向問題:

        在物件(Object)內指定一個屬性(prorerty)用
                        
        var someObj=
                            {
                                this.屬性=OO;
                                //代表public公開的(外部可直接存取)
                                var 屬性=OO;
                                //代表私有的,要開get或是set  method
                            }
3.物件偵測

範例一:

var opacity=1.0;
//必須先指定值給他
var img1=document.onclick=adjustOpacity;


function adjustOpacity ( )
{
    opacity=opacity-0.1;
    //這個函式要對
    var img=document.getElementById("img1");
    //把文件上的img1指派給一個物件

    if(img1.style.filter)
    //假使是IE就是filter(濾鏡)
    {
        var opac = opacity * 100;
        //濾鏡是100分之幾
        img1.style.filter="alpha( opacity:"+opac+")";
        
    }
    else if(img1.style.opacity)
    {
        img1.style.opacity=opacity;
    }
    else
    {
        alert("Opacity not supported")
    }
}

4.封裝 ( encapsulation )

        把兩個執行的動作各存到一個method裡

5.複雜的call( )和apply( )

基本上是一樣的東西

你可以想像把一個物件增加了其他物件的屬性和方法

這樣解釋成繼承(inheritance)


PS:指名function ( metod ) 的兩種定義方式

1.直接定義

function test(){}

2.指派

var test=function(){}


都叫做test ( )

function tune(title,type)
{
    this.title=title;
    this.type=type;
    this.getTitle=function()
    {
        return "Song:  "+this.title+ "  "+this.type;
    }
}

function artist_tune(title,type,artist)
{
    this.artist=artist;
    this.toString("Artist is "+artist);
    tune.apply(this,drgument);
    this.toString=function()
    {
        return "Artist: "+this.artist+ " " +this.getTitle; 
    }
}

artist_tune.prototype=new tune( );

call( )和apply()的差異在於

call(this,arg1物件1,arg2物件2,arg3物件3,...)

apply(this,arguments)

2011年3月26日 星期六

Javascript Design Pattens筆記(3)

寫API Docs (1)定義一個應用程式 建立一個應用程式 程式碼 (2)定義一個物件裡頭有兩個方法 例一: 物件:math_stuff 方法1:sum ( ) 方法2::multi( ) 例二:建立有建構函式的class

Javascript Design Pattens筆記(2)

1.javascript測試方式:

    (1).alert('字串');
    (2).console.log('字串',{});
         console.dir("字串") 
//差在","分隔厚,一次顯示或類舉顯示

IE:測試工具JSLint(後來發現IE8.9都有開發者測試工具)



2.不要用全域參數,最好了理由是JS沒有關係子

var global_var=1;
//無法被delete

var global_var=1;
global_novar=2;
(function()
    {
        global_fromfunc=3;
    }());
console.log(global_var);
console.log(global_novar);
console.log(global_fromfunc);
delete global_var;
delete global_novar;
delete global_fromfunc;
console.log(global_var);
//這裡就會被卡住了

2.eval( )函式非常邪惡

eval("字串");
這段字串如果是json就會轉為物件

但是只要執行過原本的自竄就會通通被轉為真實的程式宣告

要使用eval()請包裝在匿名函式處理

(function()
{
eval(do something)
}());

3.parsrInt( )強制轉型Number


Javascript Design Pattens筆記(1)

  由於工作的關係今年開始認真學習了一下javascript,
當年在學actionscript3.0的時候一直有人說as2.0的語法,
與javascript相似,而3.0去和java相似。

    這兩年我沒這個運氣進入JAVA的世界,或許說是沒能力,
到是多了不少碰javascript的機會。

    對我來說,CSS和Javascript是一種不得不學的語言,
畢竟自己給自己的定位是前端工程師,代表的是基礎中的基礎。

只是,大部份的javascript都是抱怨W3C如何如何,怎細想想,
不公平本來就是事件的真理。加油吧各位。

接觸javascript很快就會被各家柳覽器的事件處理給淹沒,
還好在事件方面有JQuery這套framework,
在麻煩的事情解決了之後,coding style才是令人最痛苦的。

畢竟你習慣在actionscript3.0中使用oop(Object-Oriented-Programming,物件導向)的概念,而JS又是那麼的"半套",喔我不愛"半套",
沒辦法import class沒辦法package  沒辦法extends  沒辦法implement(所以我討厭半套)。

只是工作還是要作,在抱怨下去跟抱怨瀏覽器一樣,有人開始自己架構一JS成為類完整的OOP
我像大概大家都還是很喜歡OOP的概念。

最近,開始看O'Reilly所出的一本Javascript Patternss我想筆記一下作為自己對js用功的一點紀念。

2010年10月30日 星期六

Processing筆記(一)基礎型別

Processing Document

命名規則

要對程式裡的變數、函式、列別...等命名。 利用駝峰式命名法

列如

滑鼠按下控制器函式


第一個小寫其他每個單字第一個字母大寫



一、基本型別


變數宣告


1.整數的變數宣告



例如:



你也可以先宣告起來不給值

之後再給"值"

ps:這裡說int是整數,意思是正負值都可以,

如果有一個值145.123456



a會等於145

long的用法跟int相同,只是long的值比較大,一般來說int就夠用了

2.浮點數

變數宣告



也可以是正負有小數的值

double跟float一樣


3.color變數


宣告
舉例: 範例
維基Saturation飽和度
維基色調Hue
維基Brightness明度

array陣列

陣列的宣告有型別

基本寫法

字串類別string 宣告方式 例如