笔记 - JS易忘基础知识(二)(关于对象和继承)
1 ECMAScript中所有变量都采用晚绑定的方法,不支持早绑定。晚绑定是指我们的代码在运行时再检查对象是否提供了我们所需要的方法和属性。
2 Array对象就像一个栈,提供了push和pop方法。Array对象又像一个队列,提供了shift和push方法。
3 对象有为三种:本地对象、内置对象和宿主对象。内置对象只有两个:Global和Math,都属于本地对象。
4 ECMAScript只存在公用作用域
5 定义类或对象一般使用“构造函数+原型”方式:用构造函数定义所有非方法的成员,用原型定义方法成员。
实现继承一般使用“对象冒充(object masquerading)+原型链”方式:用对象冒充继承构造函数的所有成员,用原型链继承原型的方法(用了原型链,instanceOf运算符才有效)。
function Animal(animalName){this.name = animalName;} Animal.prototype.showName = function(){alert(this.name);} function Bird(birdName, birdColor) { Animal.call(this, birdName); this.color = birdColor; } Bird.prototype = new Animal(); Bird.prototype.showColor = function(){alert("I am "+ this.color);} var bird = new Bird("woohu", "red"); bird.showName(); bird.showColor();
6 改进字符串处理(将第一段改进为第二段,节约一半时间):
代码一:
var str = "hello"; str += "world";
代码二:
function StringBuffer(){this._strings = new Array();} StringBuffer.prototype.append = function(str){this._strings.push(str);} StringBuffer.prototype.toString = function(){retuen this._strings.join("");}
7 极晚绑定:你甚至可以在对象实例化后在定义它的方法,如下
var o = new Object(); Object.prototype.fn = function(){alert("hello");}; o.fn();
不过不建议使用极晚绑定,因为很难对其进行跟踪和记录。