《JavaScript語言精粹》經典記錄

來源:互聯網
上載者:User

書中避開雞肋與糟粕,只討論精華部門,不談DOM與HTML,只關注語言本身。

JavaScript的確是一種非常優雅的語言,直接用代碼錶示吧。

 

以下代碼摘自《JavaScript語言精粹》,大多表現著一種基於原型的弱類型語言的特性,

經過調試,略有修改。

 

//給類型加方法
Function.prototype.method = function (name, func) {
    this.prototype[name] = func;
    return this;
};

//執行個體化一個建構函式
if(typeof Object.beget !=='function'){
    Object.beget=function(o){
        var F=function () {};
        F.prototype=o;
        return new F();
    };
}

//異常處理
try{
    document.writeln(document.body.childNodes);
}
catch(e){
document.writeln(e.name+':'+e.message);    
}

//閉包
var add_the_handlers=function (nodes){
    var i;
    for(i=0;i<nodes.length;i+=1){
        nodes[i].onclick=function (i){
            return function (e){
                alert(i);
            };
        }(i);
    }
};
add_the_handlers(document.body.childNodes);

//模組
String.method('deentityify', function () {
    var entity = {
        quot: '"',
        lt: '<',
        gt: '>'
    };
    return function () {
        return this.replace(/&([^&;]+);/g,
            function (a,b){
                var r=entity[b];
                return typeof r==='string'?r:a;
            }
        );
    };
    } ()
);
document.writeln('<br>');
document.writeln('&lt;&quot;&gt;'.deentityify());
document.writeln('123'.deentityify());

//偽類
Function.method('new', function () {
    var that = Object.beget(this.prototype);
    var other = this.apply(that, arguments);
    return (typeof other === 'object' && other) || that;
});

var Mammal = function (name) {
    this.name = name;
    this.age = 1;
};
Mammal.prototype.get_name = function () {
    return this.name;
};
Mammal.prototype.says = function () {
    return this.saying || '';
};
Mammal.prototype.get_age = function () {
    return this.age;
};
var myMammal = new Mammal('Herb the Mammal');
var name = myMammal.get_name(); //可以訪問到name屬性
//var Cat = function (name) {
//    this.name = name;
//    this.saying = 'meow';
//};
//Cat.prototype = new Mammal();
//Cat.prototype.purr = function (n) {
//    var i, s = '';
//    for (i = 0; i < n; i++) {
//        if (s) {
//            s += '-';
//        }
//        s += 'r';
//    }
//    return s;
//};
//Cat.prototype.get_name = function () {
//    return this.says() + ' ' + this.name + ' ' + this.says();
//};
//現在除了特定的外,還是可以訪問到私人屬性。

//定義inherits方法,以實現繼承偽類
Function.method('inherits', function (Parent) {
    this.prototype = new Parent();
    return this;
});
var Cat = function (name) {
    this.name = name;
    this.saying = 'meow';
} .inherits(Mammal).method('purr', function (n) {
    var i, s = '';
    for (i = 0; i < n; i++) {
        if (s) {
            s += '-';
        }
        s += 'r';
    }
    return s;
}).method('get_name', function () {
    return this.says() + ' ' + this.name + ' ' + this.says();
});
var myCat = new Cat('Henrietta');
var says = myCat.says(); //'meow'
var purr = myCat.purr(5); //'r-r-r-r-r'
var name = myCat.get_name(); //'meow Henrietta meow'
var name1 = myCat.name;
//var age1 = mycat.get_age();//無法訪問父類方法
document.writeln('<br>');
document.writeln(says + ' ' + purr + ' ' + name + ' '+name1); //維度
//建立包含10個0的數組
Array.dim=function(dimension,initial){
    var a=[],i;
    for(i=0;i<dimension;i+=1){
        a[i]=initial;
    }
    return a;
}
var myArray=Array.dim(10,0);

//給Array添加矩陣函數
Array.matrix=function(m,n,initial){
    var a,i,j,mat=[];
    for(i=0;i<m;i+=1){
        a=[];
        for(j=0;j<n;j+=1){
            a[j]=initial;
        }
        mat[i]=a;
    }
    return mat;
}
//0填充4*4的矩陣
var myMatrix=Array.matrix(4,4,0);
document.writeln(myMatrix[3][3]);    //0

//用來構造一個恒等矩陣的方法。
Array.identity=function(n){
    var i,mat=Array.matrix(n,n,0);
    for(i=0;i<n;i+=1){
        mat[i][i]=1;
    }
    return mat;
};
myMatrix=Array.identity(4);
document.writeln(myMatrix[3][3]);    //1 

 

相關文章

Alibaba Cloud 10 Year Anniversary

With You, We are Shaping a Digital World, 2009-2019

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。