Adakah kelas dalam es6 mempunyai atribut statik?

青灯夜游
Lepaskan: 2023-02-15 12:05:39
asal
2181 orang telah melayarinya

Kelas dalam es6 tidak mempunyai atribut statik. Atribut statik ialah atribut kelas itu sendiri, iaitu, atribut ditakrifkan secara langsung di dalam kelas (Class.propname) dan tidak perlu dijadikan instantiated walau bagaimanapun, ES6 menetapkan bahawa hanya terdapat kaedah statik di dalam Kelas dan tiada atribut statik;

Adakah kelas dalam es6 mempunyai atribut statik?

Persekitaran pengendalian tutorial ini: sistem Windows 7, ECMAScript versi 6, komputer Dell G3.

Dalam ES6, kelas (kelas) telah diperkenalkan sebagai templat untuk objek, dan kelas boleh ditakrifkan melalui kata kunci kelas.

Intipati kelas ialah fungsi.

Ia boleh dilihat sebagai gula sintaksis, menjadikan penulisan prototaip objek lebih jelas dan lebih seperti sintaks pengaturcaraan berorientasikan objek.

Kaedah statik kelas ES6, sifat dan sifat contoh

Sebuah kelas adalah bersamaan dengan prototaip suatu tika akan menjadi warisan Instance. Jika kata kunci statik ditambahkan sebelum kaedah, ini bermakna kaedah itu tidak akan diwarisi oleh contoh, tetapi akan dipanggil terus melalui kelas Ini dipanggil "kaedah statik".

class Foo {
	static classMethod() {
		return 'hello';
	}
}
Foo.classMethod() // 'hello'
var foo = new Foo();
foo.classMethod()
	// TypeError: foo.classMethod is not a function
Salin selepas log masuk

Dalam kod di atas, terdapat kata kunci statik sebelum kaedah classMethod kelas Foo, menunjukkan bahawa kaedah tersebut ialah kaedah statik dan boleh dipanggil terus pada kelas Foo (Foo.classMethod()) bukannya dalam Dipanggil pada contoh kelas Foo. Jika kaedah statik dipanggil pada contoh, ralat dilemparkan menunjukkan bahawa kaedah itu tidak wujud.
Kaedah statik kelas induk boleh diwarisi oleh subkelas.

class Foo {
	static classMethod() {
		return 'hello';
	}
}
class Bar extends Foo {}
Bar.classMethod(); // 'hello'
Salin selepas log masuk

Dalam kod di atas, kelas induk Foo mempunyai kaedah statik dan Bar subkelas boleh memanggil kaedah ini.

Kaedah statik juga boleh dipanggil dari objek super.

class Foo {
	static classMethod() {
		return 'hello';
	}
}
class Bar extends Foo {
	static classMethod() {
		return super.classMethod() + ', too';
	}
}
Bar.classMethod();
Salin selepas log masuk

Sifat statik

Sifat statik merujuk kepada sifat Kelas itu sendiri, iaitu Class.propname, bukannya sifat yang ditakrifkan pada objek contoh (ini ).

class Foo {}
Foo.prop = 1;
Foo.prop // 1
Salin selepas log masuk

Kaedah penulisan di atas mentakrifkan prop sifat statik untuk kelas Foo.

Pada masa ini, hanya cara penulisan ini yang boleh dilaksanakan, kerana ES6 dengan jelas menetapkan bahawa terdapat hanya kaedah statik di dalam Kelas dan tiada atribut statik.

//  以下两种写法都无效
class Foo {
	//  写法一
	prop: 2
		//  写法二
	static prop: 2
}
Foo.prop // undefined
Salin selepas log masuk

ES7 mempunyai cadangan untuk sifat statik, yang kini disokong oleh transkoder Babel.

Cadangan ini menetapkan kaedah penulisan baharu untuk kedua-dua atribut contoh dan atribut statik.

(1) Atribut contoh kelas

Atribut contoh kelas boleh ditulis ke dalam takrif kelas menggunakan persamaan.

class MyClass {
	myProp = 42;
	constructor() {
		console.log(this.myProp); // 42
	}
}
Salin selepas log masuk

Dalam kod di atas, myProp ialah harta instance MyClass. Pada contoh MyClass, sifat ini boleh dibaca.
Sebelum ini, apabila kami menentukan sifat contoh, kami hanya boleh menulisnya dalam kaedah pembina kelas.

class ReactCounter extends React.Component {
	constructor(props) {
		super(props);
		this.state = {
			count: 0
		};
	}
}
Salin selepas log masuk

Dalam kod di atas, atribut this.state ditakrifkan dalam pembina.
Dengan kaedah penulisan baharu, anda tidak perlu mentakrifkannya dalam kaedah pembina.

class ReactCounter extends React.Component {
	state = {
		count: 0
	};
}
Salin selepas log masuk

Cara penulisan ini lebih jelas berbanding sebelum ini.

Untuk tujuan kebolehbacaan, tatatanda baharu membenarkan penyenaraian langsung sifat contoh yang telah ditakrifkan dalam pembina.

class ReactCounter extends React.Component {
	constructor(props) {
		super(props);
		this.state = {
			count: 0
		};
	}
	state;
}
Salin selepas log masuk

(2) Atribut statik kelas

Untuk atribut statik kelas, cuma tambah kata kunci statik di hadapan kaedah penulisan atribut contoh di atas.

class MyClass {
static myStaticProp = 42;
constructor() {
console.log(MyClass.myProp); // 42
}
}
Salin selepas log masuk

Begitu juga, kaedah penulisan baharu ini sangat memudahkan ekspresi sifat statik.

//  老写法
class Foo {}
Foo.prop = 1;
//  新写法
class Foo {
	static prop = 1;
}
Salin selepas log masuk

Dalam kod di atas, sifat statik dalam cara penulisan lama ditakrifkan di luar kelas. Selepas keseluruhan kelas dijana, atribut statik dijana. Ini memudahkan untuk mengabaikan atribut statik ini dan tidak mematuhi prinsip organisasi kod yang kod berkaitan harus disatukan. Selain itu, cara penulisan baharu ialah pengisytiharan eksplisit (deklaratif) dan bukannya pemprosesan tugasan, yang mempunyai semantik yang lebih baik.

Atas ialah kandungan terperinci Adakah kelas dalam es6 mempunyai atribut statik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan