* 实例成员:
* 提供给实例使用的方法和属性,就称之为实例成员。
* 实例方法:
* 提供给实例使用的方法,就称之为实例方法。
* 静态成员(类成员):
* 提供给函数使用的方法和属性,就称之为静态成员。
* 静态方法(类方法):
* 提供给函数使用的方法,就称之为静态方法。
* 类:
* 在ES6之前,通常我们会把构造函数当做是类。
function Person( name, age, MAX_AGE ) {
/*
* 这里通过this添加的实例成员,
* 都是添加到了实例自身上。
* */
// 这是实例成员,因为这是供实例使用的。
this.name = name;
// 这是实例成员,因为这是供实例使用的。
this.age = age;
// 这是实例成员,因为这是供实例使用的。
// 实例成员的作用面比较窄,
// 这里代表某个人最大的年龄
this.MAX_AGE = MAX_AGE;
}
// 这是静态成员,因为这是添加给函数使用的。
// 静态成员的作用面更广,代表的含义也更广。
// 我们这里代表整个人类最大的年龄
Person.MAX_AGE = 300;
Person.prototype = {
constructor: Person,
// 这是实例成员,因为这是供实例使用的。
// 但是这里的属性和方法,并没有添加到实例自身。
run: function( ) {
// 为了减少冗余,复用静态方法
Person.run( this.age );
}
}
// 如果一些方法,通用性已经很强了,
// 那么就可以考虑把他加到函数中作为静态方法使用。
Person.run = function( age ) {
if ( age < 5 ) {
console.log( '趴着跑' );
}else if ( age >= 5 && age <= 16 ) {
console.log( '跳着跑' );
}else if ( age > 16 && age < 30 ) {
console.log( '跑酷' );
}else {
console.log( '拄着拐杖跑' );
}
}
* 为什么都是实例方法复用静态方法:
* 因为。静态方法服务的面更广,即可以服务实例,
* 也可以服务其他的地方,所以实例方法可以复用静态方法( 即实例方法中可以使用静态方法解决问题 )。
* 而实例方法只服务于实例,没法服务与更多的地方,
* 所以静态方法无法复用实例方法( 即静态方法中无法使用实例方法解决问题 )。
function Person() {
}
// 这里是extend 即时静态方法,又是实例方法
Person.extend = Person.prototype.extend = function( obj ) {
for ( var key in obj ) {
this[ key ] = obj[ key ];
}
};
* 预期,谁调用extend,就给谁混入内容;
* 那么这就和this相关了,内置的实现就要使用this。
// 预期给Person自己添加静态成员
Person.extend({
});
// 预期给Person的实例自己添加实例成员
Person.prototype.extend({
});
js中的实例成员、实例方法、静态成员、静态方法
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 静态字段,静态方法被所有的实例话类所共享生命周期随类的存在而存在,可以通过一般实例化变量去使用也可以直接通过类去调...
- 最近一个项目中需要使用到类似 C#、java 那样的类的字段、类的成员变量。 形式如下: Person.name ...