JavaScript-静态属性和静态方法

先看第一个例子

class Cat {
	MyName = '德玛';
}
let cat1 = new Cat();
console.log(cat1.hasOwnProperty('MyName')); //true

很显然 name='德玛'相当于this.name='德玛';这是实例属性,而不是静态属性,静态属性需要用static修饰

class Cat {
	static MyName = '德玛';
}
let cat1 = new Cat();
console.log(cat1.hasOwnProperty('MyName')); //false
console.log(Cat.hasOwnProperty('MyName')); //ture
console.log(Cat.MyName); //'德玛'

说明静态属性就是类的属性。

静态属性也可以继承:

class Cat {
	static myName = '德玛';
}
class TomCat extends Cat {
	constructor(props) {
		super(props);//这个作用是继承实例属性和实例方法
	}

}
console.log(TomCat.myName); // 德玛

静态方法中调用其它静态属性和方法:

class Cat {
	static MyName = '德玛';
	static p1 = function() {
		console.log(this.MyName);
	}
	static p2 = function() {
		this.p1();
	}
}
let cat1 = new Cat();
//cat1.p1();//error
Cat.p1(); //德玛
Cat.p2(); //德玛

实例方法调用静态属性/方法:

class Cat {
	static MyName = '德玛';
	static p1 = function() {
		console.log(this.MyName);
	}
	constructor() {
		this.p3 = function() {
			Cat.p1();//使用静态属性相同,Cat.MyName
			//或者使用
			//this.constructor.p1();
		}
	}
}
let cat = new Cat();
cat.p3(); //德玛

原型方法中调用静态属性/方法

class Cat {
	static MyName = '德玛';
	static p1 = function() {
		console.log(this.MyName);
	}

	constructor() {}
	p3() {
		console.log(Cat.MyName);
	}
}
let cat = new Cat();
console.log('p3' in cat); //true
console.log(cat.hasOwnProperty('p3')) //false 说明是原型
cat.p3(); //引用静态属性跟在实例方法中一致

最后还有一点疑惑的地方

class Cat {
	p1 = function() {}
	p2() {};
}
//p1是实例方法,不管后面赋值的是什么,跟p1='1'没有区别,都是实例
//p2是原型方法
//测试
let cat = new Cat();
console.log('p1' in cat && cat.hasOwnProperty('p1')); //true
console.log('p2' in cat && cat.hasOwnProperty('p2')); //false

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值