คำอธิบายวิธี:
ส่งคืนวัตถุบัฟเฟอร์ใหม่และบัฟเฟอร์ใหม่และบัฟเฟอร์เก่าแชร์หน่วยความจำ
แต่มันจะลดลงโดยการชดเชยดัชนีเริ่มต้นและสิ้นสุด (ตัวอย่างเช่นหากมี 1 ถึง 10 ไบต์ในบัฟเฟอร์เราต้องการเพียง 4-8 ไบต์ดังนั้นเราจึงสามารถใช้ฟังก์ชั่นนี้ buf.slice (4,8) เพราะพวกเขาแบ่งปันหน่วยความจำหนึ่งหน่วยดังนั้นพวกเขาจะไม่ใช้หน่วยความจำ)
เนื่องจากหน่วยความจำถูกแชร์หลังจากแก้ไขบัฟเฟอร์ใหม่เนื้อหาของบัฟเฟอร์เก่าจะได้รับการแก้ไข
ไวยากรณ์:
การคัดลอกรหัสมีดังนี้:
buffer.slice ([start], [end])
รับพารามิเตอร์:
เริ่มต้นตำแหน่งเริ่มต้น
สิ้นสุดตำแหน่งสิ้นสุดค่าเริ่มต้นถึงความยาวบัฟเฟอร์
ตัวอย่าง:
สร้างบัฟเฟอร์โดยใช้ตัวอักษร ASCII ใช้ฟังก์ชันชิ้นแล้วแก้ไขไบต์ในบัฟเฟอร์ดั้งเดิม
การคัดลอกรหัสมีดังนี้:
var buf1 = บัฟเฟอร์ใหม่ (26);
สำหรับ (var i = 0; i <26; i ++) {
buf1 [i] = i + 97; // 97 คือ ASCII A
-
var buf2 = buf1.slice (0, 3);
console.log (buf2.toString ('ascii', 0, buf2.length));
buf1 [0] = 33;
console.log (buf2.toString ('ascii', 0, buf2.length));
// ABC
//! BC
ซอร์สโค้ด:
การคัดลอกรหัสมีดังนี้:
// todo (trevnorris): ปัจจุบันทำงานเช่น array.prototype.slice () ซึ่ง
// ไม่ปฏิบัติตามมาตรฐานใหม่สำหรับการโยนดัชนีนอกช่วง
buffer.prototype.slice = function (start, end) {
var len = this.length;
เริ่ม = ~~ เริ่ม;
end = util.isundefined (สิ้นสุด)? เลน: ~~ end;
ถ้า (เริ่ม <0) {
เริ่ม += len;
ถ้า (เริ่ม <0)
เริ่ม = 0;
} อื่นถ้า (เริ่ม> len) {
เริ่มต้น = len;
-
ถ้า (สิ้นสุด <0) {
สิ้นสุด += len;
ถ้า (สิ้นสุด <0)
สิ้นสุด = 0;
} อื่นถ้า (สิ้นสุด> len) {
สิ้นสุด = len;
-
ถ้า (สิ้นสุด <เริ่ม)
สิ้นสุด = เริ่ม;
var buf = new NativeBuffer ();
SLICEONTO (นี่, buf, start, end);
buf.length = end - เริ่ม;
if (buf.length> 0)
buf.parent = util.isundefined (this.parent)? สิ่งนี้: สิ่งนี้ parent;
กลับ buf;
-