目录:
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中的类型转换
- 数值或布尔值转变为字符串:String()
- 把字符串转换成数值:parseFloat()/parseInt()
- 把字符串或数值转变成为布尔值:双重”非” 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
函数是一等对象
函数可以存储在变量中,可以作为参数传给其他函数,可以作为返回值从其他函数传出,还可以在运行时进行构造