TextEncoder#
new TextEncoder()#
Interfejs TextEncoder może być wywoływany w roli konstruktora, dzięki czemu pozwala na bezpośrednie tworzenie nowych koderów tekstowych wprost z interfejsu.
Opis działania#
Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:
var new_encoder = new TextEncoder();
gdzie poszczególne człony oznaczają:
- new_encoder - referencja do nowego kodera tekstowego korzystającego z kodera UTF-8.
Algorytm wywołania konstruktora new TextEncoder()
nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Niech enc będzie nowym obiektem typu
TextEncoder
. - Ustaw koderTE w enc na koder skojarzony z UTF-8.
- Zwróć enc.
Konstruktor new TextEncoder()
nie pobiera żadnej etykiety wskazującej na używany koder, w przeciwieństwie do konstruktora new TextDecoder()
, gdyż wspiera tylko i wyłącznie UTF-8, chociaż w przeszłości dopuszczano jeszcze UTF-16BE i UTF-16LE. Przekazane argumenty nie mają żadnego wpływu na działanie konstruktora (szczegóły).
Obiekt zwracany przez konstruktor new TextEncoder()
implementuje interfejs TextEncoder, dlatego ma dostęp do wszystkich poleceń z tego interfejsu (oraz z kolejnych interfejsów w łańcuchu dziedziczenia).
Prosty przykład:
<!DOCTYPE html>
<html>
<head>
<script>
function createEncoder(label, variant){
var info = document.getElementById("info");
try{
if (variant == 0){
label = "brak";
var new_encoder = new TextEncoder();
}
else {
var new_encoder = new TextEncoder(label);
}
info.innerHTML = "Interfejs kodera tekstowego: " + new_encoder
+ "<br>" + "Argument z konstruktora (łańcuch): " + label
+ "<br>" + "Właściwość encoding: " + new_encoder.encoding;
}
catch(e){
info.innerHTML = "Wyjątek: " + e
+ "<br>" + "Argument z konstruktora: " + label;
}
}
</script>
</head>
<body>
<p>Kliknij przycisk by utworzyć nowy obiekt TextEncoder.</p>
<ul>
<li>
<div>Wywołanie konstruktora bez argumentu:</div>
<input type="button" value="new TextEncoder()" onclick="createEncoder('', 0)">
</li>
<li>
<div>Wywołanie konstruktora z argumentem, który tak naprawdę jest nieistotny:</div>
<input type="button" value="new TextEncoder('')" onclick="createEncoder('', 1)">
<input type="button" value="new TextEncoder('utf8')" onclick="createEncoder('utf8', 1)">
<input type="button" value="new TextEncoder('UTF8')" onclick="createEncoder('UTF8', 1)">
<input type="button" value="new TextEncoder('utf-16be')" onclick="createEncoder('utf-16be', 1)">
<input type="button" value="new TextEncoder('utf-16le')" onclick="createEncoder('utf-16le', 1)">
<input type="button" value="new TextEncoder('iso-8859-2')" onclick="createEncoder('iso-8859-2', 1)">
<input type="button" value="new TextEncoder('csiso2022kr')" onclick="createEncoder('csiso2022kr', 1)">
<input type="button" value="new TextEncoder('dowolnyTekst')" onclick="createEncoder('dowolnyTekst', 1)">
</li>
</ul>
<p style="color: blue;">Szczegółowe informacje dla nowego obiektu TextEncoder:</p>
<p id="info"></p>
</body>
</html>
Kolejny przykład testujący obsługę w wątkach roboczych:
<script>
var worker_fn = function(e){
var new_encoder = new TextEncoder();
var result = "Interfejs kodera tekstowego: " + new_encoder
+ "<br>" + "Właściwość encoding: " + new_encoder.encoding;
self.postMessage(result);
};
var blob = new Blob(["onmessage = " + worker_fn.toString()], {type: "text/javascript"});
var worker = new Worker(window.URL.createObjectURL(blob));
worker.onmessage = function(e){
document.write(e.data);
document.close();
};
worker.postMessage("start");
</script>
Składnia Web IDL#
[Constructor, Exposed=(Window,Worker)] interface TextEncoder { };