[设计模式]JS的性质

目录:

1. JavaScript的灵活性

2. 面向对象设计

3. 函数是一等对象

JavaScript的灵活性

JS最强大的特性是其灵活性。例子:用不同的方法完成相同的任务,启动和停止一个动画。

1.    过程式编写
/*
 * use functions
 */
function startAnimation() {
    //...
}

function stopAnimation() {
    //...
}

2.    面向对象编写
/*
 * Anim class 
 */
var Anim = function() {
    //...
};
Anim.prototype.start = function() {
    //...
};
Anim.prototype.stop = function() {
    //...
};

//Usage
var myAnim = new Anim();
myAnim.start();
//...
myAnim.stop();


var Anim2 = function() {
    //...
};
Anim2.prototype = {
    start: function() {
        //...
    },
    stop: function() {
        //...
    }
};

3.
/**
 * 为Function对象添加自定义方法
 * @param {String} name 方法的名称
 * @param {Function} fn 用于新方法的函数
 */
Function.prototype.method = function(name, fn) {
    this.prototype[name] = fn;
};
//用上面的方法为class Anim添加方法
var Anim3 = function() {
    //...
}
/*
function Anim3() {
    //...
}*/
Anim3.method('start', function(){
    //...
});
Anim3.method('stop', function(){
    //...
});

4.
//链式调用
Function.prototype.method2 = function(name, fn) {
    this.prototype[name] = fn;
    return this;
}

var Anim4 = function() {
    //...
}
Anim4.method2('start', function() {
    console.log('start');    
}).method2('stop', function() {
    console.log('stop');
});
//Usage
var myAnim = new Anim4();
myAnim.start();
myAnim.stop();

弱类型语言

一个变量可以属于几种类型之一,这取决于其包含的数据。

布尔值、数值型、字符串型、对象类型、包含可执行代码的函数类型、空类型(null)、未定义类型(undefined)

如果想将null和undefined用在期望是一个对象的地方都会造成一个类型错误异常

原始数据类型按值传递,而其他数据类型(除undefined)则按引用传递。

JS中的类型转换

  1. 数值或布尔值转变为字符串:String()
  2. 把字符串转换成数值:parseFloat()/parseInt()
  3. 把字符串或数值转变成为布尔值:双重”非”    var bool = !!num;
console.log(10 + ' abc');           //”10 abc”
console.log(true + 'abc');          //”trueabc”
var a = true;
console.log(a.toString());          //"true"
console.log('3'*'5');               //15 两个字符串都转为数字
console.log(3 - 'b');               //NaN

  

 

函数是一等对象

函数可以存储在变量中,可以作为参数传给其他函数,可以作为返回值从其他函数传出,还可以在运行时进行构造

原文地址:https://www.cnblogs.com/mackxu/p/2936160.html