JS类的static
static
类(class)通过 static 关键字定义静态⽅法。不能在类的实例上调⽤静态⽅法,⽽应该通过类本⾝调⽤。这些通常是实⽤程序⽅法,例如创建或克隆对象的功能。
语法
static methodName(){...}
描述
静态⽅法调⽤直接在类上进⾏,不能在类的实例上调⽤。静态⽅法通常⽤于创建实⽤程序函数。
调⽤静态⽅法
从另⼀个静态⽅法
静态⽅法调⽤同⼀个类中的其他静态⽅法,可使⽤this关键字。
class StaticMethodCall {
static staticMethod(){
return'Static method has been called';
}
static anotherStaticMethod(){
return this.staticMethod()+' from another static method';
}
}
StaticMethodCall.staticMethod();
// 'Static method has been called'
js方法StaticMethodCall.anotherStaticMethod();
// 'Static method has been called from another static method'
从类的构造函数和其他⽅法
⾮静态⽅法中,不能直接使⽤ this关键字来访问静态⽅法。⽽是要⽤类名来调⽤:CLASSNAME.STATIC_METHOD_NAME() ,或者⽤构造函数的属性来调⽤该⽅法: structor.STATIC_METHOD_NAME().
class StaticMethodCall {
constructor(){
console.log(StaticMethodCall.staticMethod());
// 'static method has been called.'
console.structor.staticMethod());
// 'static method has been called.'
}
static staticMethod(){
return'static method has been called.';
}
}
public
对象的成员都是public成员。任何对象都可以访问,修改,删除这些成员或添加新成员。主要有两种⽅式来在⼀个新对象⾥放置成员:
在构造函数⾥
这种技术通常⽤来初始化public实例变量。构造函数的“this”变量⽤来给对象添加成员。
functin Container(param){
}
这样,如果我们构造⼀个新对象var myContainer = new Container(‘abc’),则ber为’abc’。
在prototype⾥
这种技术通常⽤来添加public⽅法。当寻⼀个成员并且它不在对象本⾝⾥时,则从对象的构造函数的prototype成员⾥。
prototype机制⽤来做继承。为了添加⼀个⽅法到构造函数创建的所有对象⾥,只需添加到构造函数的prototype:
Container.prototype.stamp=function(string){
ber + string;
}
这样,我们可以调⽤该⽅法myContainer.stamp(‘def’),结果为’abcdef’。
private
private成员由构造函数产⽣。普通的var变量和构造函数的参数都称为private成员。
function Container(param){
var secret =3;
var that =this;
}
该构造函数创建了3个private实例变量: param,secret和that。它们被添加到对象中,但是不能被外部访问,也不能被该对象⾃⼰的public⽅法访问。它们只能由private⽅法访问。private⽅法是构造函数的内部⽅法。
function People(){
this.name ="Yorhom";
var age =16;
return this.name
};
return age;
};
}
var yorhom =new People();// undefined
alert(yorhom.age);// 16
Age())
例:编写js的类,使其拥有public和private类型的属性和⽅法
function People(){
this.name ="Yorhom";
var age =16;
return this.name
};
return age;
};
}
var yorhom =new People();// undefined
alert(yorhom.age);// 16
Age())
protected
protected可以修饰数据成员,构造⽅法,⽅法成员,不能修饰类(此处指外 部类,不考虑内部类)。被protected修饰的成员,能在定义它们的类中,同包 的类中被调⽤。如果有不同包的类想调⽤它们,那么这个类必须是定义它们的类 的⼦类。
//module foo:
class Foo {
constructor(){
this[Foo.PROPERTY]='hello';
}
test(){
console.log(this[Foo.PROPERTY]); }
}
Foo.PROPERTY=Symbol();
export default Foo;//module bar: import Foo from'(module foo)';
class Bar extends Foo {
test2(){
console.log(this[Bar.PROPERTY]); }
}
export default Bar;//module main: import Bar from'(module bar)';
st2();
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论