<script type = "text/javascript">
// 定义一个类,构造函数;
var testClass = function() {
this.name = "Woody";
};
// 通过prototype对象定义类的其他成员;
testClass.prototype = {
altName: function() {
testClass.altName( this.name ); // 调用testClass.altName()方法;
}
};
// 实现继承的方法;
testClass.extend = function(o, p) {
if ( !p ) { p = o; o = this; }
for ( var i in p ) o[ i ] = p[ i ];
return o;
};
// 对testClass进行扩展;
testClass.extend({
altName: function( str ) {
alert( "My name is " + str);
},
add: function( i ) {
alert( ++i );
}
});
var tc = new testClass(); // 实例化一个tesClass对象;
// 反射机制,看tc实例继承了哪些属性方法;
// 从运行结果来看,它只继承了name,altName();
for ( var i in tc ) alert( i + " = " + tc[ i ]);
// 调用tc实例的altName()方法,而在定义中又调用testClass.altName()方法;
tc.altName();
// 该方法只能通过类来调用,不能通过实例来调用,比如tc.add(0)就会出错;
testClass.add( 0 );
</script>
- 如果对“类”进行extend,那么就是只有类本身才可以使用,相当于静态方法。
- 如果对本“类”的prototype进行extend,那么“类”的实例也可以使用,相当于实例方法。