Rumah > hujung hadapan web > Soal Jawab bahagian hadapan > Cara menggunakan object.assign()

Cara menggunakan object.assign()

青灯夜游
Lepaskan: 2023-01-06 16:34:50
asal
5374 orang telah melayarinya

Kaedah object.assign() digunakan untuk menetapkan nilai semua sifat terhitung daripada satu atau lebih objek sumber (sumber) kepada objek sasaran (sasaran), dan mengembalikan objek sasaran; sintaks "Object.assign (target, ...sources)", parameter "target" merujuk kepada objek sasaran, iaitu objek yang menerima sifat objek sumber, dan juga nilai pulangan yang diubah suai Parameter ". sumber" merujuk kepada objek sumber, yang mengandungi sifat yang akan digabungkan.

Cara menggunakan object.assign()

Persekitaran pengendalian tutorial ini: sistem Windows 7, versi JavaScript 1.8.5, komputer Dell G3.

Penggunaan Object.assign()

Kaedah ini digunakan untuk menetapkan nilai semua sifat terhitung daripada satu atau lebih sumber objek (sumber) diberikan kepada objek sasaran (sasaran) dan mengembalikan objek sasaran.

Object.assign(target, ...sources)
Salin selepas log masuk

sasaran: objek sasaran, objek yang menerima sifat objek sumber, dan juga nilai pulangan yang diubah suai.

sumber: objek sumber, mengandungi sifat yang akan digabungkan.

1. Salinan objek

const target = { a: 1, b: 2 };
const source1 = { b: 4, c: 5 };
const source2 = { b: 6, c: 7 };
const obj = Object.assign(target,source1,source2);
console.log(obj); // (a: 1, b: 6, c: 7)
Salin selepas log masuk

Nota:
1. Atribut dan sasaran objek sumber Jika atribut objek berbeza, ia akan disalin ke objek sasaran;
2. Jika objek sasaran dan objek sumber mempunyai atribut yang sama, nilai atribut objek sasaran akan ditimpa oleh nilai atribut objek sumber;
3. Jika terdapat berbilang objek sumber dengan sifat yang sama, maka sifat objek sasaran akan ditimpa oleh sifat objek sumber terakhir.

2. Harta yang diwarisi dan harta yang tidak boleh dikira tidak boleh disalin

const obj1 = Object.create({foo: 1}, { // foo 是个继承属性。
    bar: {
        value: 2  // bar 是个不可枚举属性。
    },
    baz: {
        value: 3,
        enumerable: true  // baz 是个自身可枚举属性。
    }
});
const obj= Object.assign({}, obj1);
console.log(obj); // { baz: 3 }
//创建对象时,如果没有设置enumerable的值,默认为false(不可枚举属性),设置为true,则为可枚举属性
Salin selepas log masuk

Nota: Object.assign kaedah Hanya sifat terhitung objek sumber sendiri akan disalin ke objek sasaran yang diwarisi dan sifat tidak terhitung tidak akan disalin.

3 Salinan mendalam objek

Salinan Object.assign() ialah salinan cetek, ia menyalin Atribut. nilai, jika nilai atribut objek sumber ialah objek obj, maka penunjuk (iaitu alamat) nilai objek disalin; jika nilai obj diubah suai pada masa ini, objek sasaran akan terjejas.
Untuk mengelakkan kesan ini, kita perlu membuat salinan mendalam objek:

let obj1 = { a: 1, b: {c: 2 }};
let obj2 = { d: 2 };
let obj = Object.assign(obj2,JSON.parse(JSON.stringify(obj1)));
console.log(obj); // { d: 2, a:1, b:{ c:2 }}
obj1.b.c = 4;
console.log(obj); // { d: 2, a:1, b:{ c:2 }}
// 对象obj1.b.c 值的变化则不会再影响到目标对象 obj 的值。
Salin selepas log masuk

Nota: Salinan dalam hanya boleh menyelesaikan salinan nilai jenis rujukan, dan pewarisan dan sifat tidak terhitung masih tidak boleh ditiru.

4. Pengecualian akan menamatkan penyalinan

const target = Object.defineProperty({}, "foo", {
    value: 1,
    writable: false
}); // target 的 foo 属性是个只读属性。

Object.assign(target, {bar: 2}, {foo2: 3, foo: 3, foo3: 3}, {baz: 4});
// TypeError: "foo" is read-only
// 注意这个异常是在拷贝第二个源对象的第二个属性时发生的。
console.log(target.bar);  // 2,说明第一个源对象拷贝成功了。
console.log(target.foo2); // 3,说明第二个源对象的第一个属性也拷贝成功了。
console.log(target.foo);  // 1,只读属性不能被覆盖,所以第二个源对象的第二个属性拷贝失败了。
console.log(target.foo3); // undefined,异常之后 assign 方法就退出了,第三个属性是不会被拷贝到的。
console.log(target.baz);  // undefined,第三个源对象更是不会被拷贝到的。
Salin selepas log masuk

5. Jenis primitif akan dibungkus ke dalam objek

Jenis primitif akan dibungkus, dan null dan undefined akan diabaikan.

const obj1 = 'aaa';
const obj2 = false;
const obj3 = true;
const obj4 = 10;
const obj= Object.assign(obj1,obj2,obj3,obj4);
console.log(obj); // { 0:'a', 1:'a', 2:'a'}
Salin selepas log masuk

Nota: Hanya objek pembalut rentetan mungkin mempunyai sifat terbilangnya sendiri.

[Pembelajaran yang disyorkan: tutorial video javascript]

Atas ialah kandungan terperinci Cara menggunakan object.assign(). 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