this.hello = superHello;
}
function subClass() {
this.base = new supperClass();
base.sayBye = subBye;
return base;
}
这种继承其实是一种扩展, 因为在调用instanceOf时, 子类会返回父类名称, 它的好处在于在构造函数继承的基础上解放了父类, 父类可以使用prototype定义自己的域, 但是子类仍然不建议使用prototype, 以免被父类覆盖. 为了可以使子类的instanceof返回正确类型, 我们可以再改进一下:
function subClass() {
this.base = new supperClass();
for ( var key in this.base ) {
if ( !this[key] ) {
this[key] = this.base[key];
}
}
this.sayBye = subBye;
}
将所有的父类域拷贝给子类一份, 不再返回父类, instanceof子类实例时就可以返回正确类型.
五. this的用法
通常情况下, this代表的是前面提到的Globle Object.也就是Browser环境时的window Object. 当function作为某一对象的 method 时, this 代表这个 function 所属的 object. 下面这段代码有格错误, 涉及到this的使用:
function Employee(a) {
this.name = a;
}
function init(){
John = Employee("Johnson");
alert(John.name);
}
在init()中我们少了一个new keyword. 于是这个代码就会报错, 因为Browser把Employee当作是window obect的一个method, 里面的this指的就是window object. init()应该改为:
function init(){
John = new Employee("Johnson");
alert(John.name);
}
同时我们也可以将Employee的constructor函数修改, 防止类似的错误:
function Employee(a) {
if (!(this instanceof Employee)) return new Employee(a);
this.name = a;
}
这样,我们即使使用原来的init()方法, 也不会报错了.
六. Array in JavaScript
Array和Object本质上是一样的, 只是Array需要由index来索引它其中的属性. index为>=0的整数.
Array有一系列buildin的方法:
1. jion() 将array中的所有element以string的形式连在一起:
var a = [1,2,3];
s = a.join(); // s == "1,2,3"
s = a.join(": "); // s == "1: 2: 3"
2. reverse() 将Array的element顺数颠倒
var a = [1,2,3];
a.reverse();
s = a.join(); // s == "3,2,1"
3. sort() 排序, 默认按字母顺序排序case sensitive, 可以自定义排序方式.
var a = [111,4,33,2];
a.sort(); // a == [111,2,33,4]
a.sort(function(a,b) { // a == [2,4,33,111]
return a-b; // Returns < 0, 0, or > 0
});
4. concat()连接多个Array
var a = [1,2,3];
a.concat(4,5); // return [1,2,3,4,5]










