Rumah  >  Artikel  >  hujung hadapan web  >  Mari kita bincangkan tentang cara menggunakan fungsi Object() untuk mencipta objek dalam JavaScript

Mari kita bincangkan tentang cara menggunakan fungsi Object() untuk mencipta objek dalam JavaScript

青灯夜游
青灯夜游ke hadapan
2022-08-04 16:32:312297semak imbas

Bagaimana untuk mencipta objek menggunakan fungsi Object()? Artikel berikut akan memperkenalkan anda kepada kaedah mencipta objek menggunakan pembina Object() (dengan tiga kaedah lain untuk mencipta objek).

Mari kita bincangkan tentang cara menggunakan fungsi Object() untuk mencipta objek dalam JavaScript

objek() baharu mencipta objek


JavaScript secara asalnya menyediakan objek Objek (perhatikan bahawa O awal ditulis dengan huruf besar ), semua objek lain mewarisi daripada objek ini. Objek itu sendiri juga merupakan pembina, dan objek baharu boleh dijana secara langsung melaluinya.

Fungsi Object() boleh membalut nilai yang diberikan ke dalam objek baharu.

Sintaks:

new Object()
new Object(value)

Parameter value ialah parameter pilihan untuk sebarang jenis.

  • Jika nilai value ialah null atau undefined atau tidak diluluskan, objek kosong akan dibuat dan dikembalikan; 🎜 >Jika nilai

    ialah jenis asas, objek kelas pembalutnya akan dibina dan objek jenis sepadan dengan nilai yang diberikan akan dikembalikan. ;
  • valueJika nilai

    ialah jenis rujukan, nilai ini masih akan dikembalikan.
  • Jika nilai yang diberikan ialah objek sedia ada, nilai sedia ada (alamat yang sama) akan dikembalikan.

    value

var obj = new Object();      //创建了一个空的对象
obj.uname = 'zhangsanfeng';
obj.name = 18;       //字面量方式创建对象不同,这里需要用 =  赋值添加属性和方法
obj.sex = 'nan';      //属性和方法后面以;结束
obj.sayHi = function() {
console.log('hi');
}
console.log(obj.uname);  
console.log(obj['age']);

Penjelasan: Mari kita bincangkan tentang cara menggunakan fungsi Object() untuk mencipta objek dalam JavaScript Hasilkan objek baharu melalui kaedah penulisan

, iaitu sama seperti kaedah penulisan

literal adalah setara. new Object()o = {}
Seperti pembina lain, jika anda ingin menggunakan kaedah pada objek Objek, terdapat dua cara untuk melakukannya.

var o1 = {a: 1};
var o2 = new Object(o1);
o1 === o2 // true

new Object(123) instanceof Number
// true

(1) Digunakan dalam objek Objek itu sendiri Contohnya, tentukan kaedah cetakan pada objek Objek untuk memaparkan kandungan objek lain.

(2) Digunakan dalam objek Object.prototype

Semua pembina mempunyai atribut prototaip yang menunjuk ke objek prototaip. Semua sifat dan kaedah yang ditakrifkan pada objek Object.prototype akan dikongsi oleh semua objek contoh. (Untuk penjelasan terperinci tentang atribut prototaip, lihat bab "Pengaturcaraan Berorientasikan Objek".)
Object.print = function(o){ console.log(o) };
var o = new Object();
Object.print(o)
// Object

Kod di atas mentakrifkan kaedah cetakan dalam Object.prototype, dan kemudian menjana contoh Objek o. o secara langsung mewarisi sifat dan kaedah Object.prototype dan boleh memanggilnya pada dirinya sendiri Dalam erti kata lain, kaedah cetakan objek o pada dasarnya memanggil kaedah Object.prototype.print. .

Seperti yang anda lihat, walaupun kaedah cetakan kedua-dua kaedah penulisan di atas mempunyai fungsi yang sama, penggunaannya adalah berbeza, jadi adalah perlu untuk membezakan antara "kaedah pembina" dan "kaedah objek contoh".
Object.prototype.print = function(){ console.log(this)};
var o = new Object();
o.print() // Object

Objek()

Objek itu sendiri ialah fungsi apabila digunakan sebagai kaedah alat, sebarang nilai boleh ditukar menjadi objek. Kaedah ini sering digunakan untuk memastikan bahawa nilai tertentu mestilah objek.

Jika parameter ialah nilai jenis primitif, kaedah Objek mengembalikan contoh objek berbalut yang sepadan

  • Kod di atas menunjukkan bahawa fungsi Objek boleh Menukar pelbagai nilai kepada objek yang dihasilkan oleh pembina yang sepadan.
Object() // 返回一个空对象
Object() instanceof Object // true

Object(undefined) // 返回一个空对象
Object(undefined) instanceof Object // true

Object(null) // 返回一个空对象
Object(null) instanceof Object // true

Object(1) // 等同于 new Number(1)
Object(1) instanceof Object // true
Object(1) instanceof Number // true

Object('foo') // 等同于 new String('foo')
Object('foo') instanceof Object // true
Object('foo') instanceof String // true

Object(true) // 等同于 new Boolean(true)
Object(true) instanceof Object // true
Object(true) instanceof Boolean // true

Jika parameter kaedah Objek ialah objek, ia sentiasa mengembalikan objek asal.

  • Dengan menggunakan ini, anda boleh menulis fungsi yang menentukan sama ada pembolehubah ialah objek.
var arr = [];
Object(arr) // 返回原数组
Object(arr) === arr // true

var obj = {};
Object(obj) // 返回原对象
Object(obj) === obj // true

var fn = function () {};
Object(fn) // 返回原函数
Object(fn) === fn // true

Perluaskan pengetahuan: tiga cara lain untuk mencipta objek

function isObject(value) {
  return value === Object(value);
}

isObject([]) // true
isObject(true) // false

Tersurat objek

{…}Kaedah literal objek ialah salah satu kaedah yang paling biasa digunakan. Ia menggunakan pendakap kerinting yang mengandungi atribut untuk mencipta objek dengan cepat.

{...}

2 Kaedah
var obj1 = {};
obj1.name = "Tom";

var obj2 = { name: "Tom", age: 12 };

var name = "Tom", age = 12;
var obj3 = { name: name, age: age };
// ES2015中,属性名和变量名相同时可简写为:
var obj3 = { name, age };

// 扩展属性,ES2018新特性,可用于克隆或合并对象,浅拷贝,不包括原型
var obj4 = { ...obj3 };

Object.create() mencipta objek baharu, menggunakan objek sedia ada untuk menyediakan objek baharu penciptaan objek.

Object.create()__proto__

/**
 * 创建一个具有指定原型的对象,并且包含指定的属性。
 * @param o 新创建对象的原型对象。可能为空
 * @param properties 包含一个或多个属性描述符的 JavaScript 对象。
 */
create(o: object | null, properties?: PropertyDescriptorMap): any;

interface PropertyDescriptorMap {
    [s: string]: PropertyDescriptor;
}

interface PropertyDescriptor {
    configurable?: boolean;
    enumerable?: boolean;
    value?: any;
    writable?: boolean;
    get?(): any;
    set?(v: any): void;
}
3. Kaedah
var obj1 = Object.create(null);
Object.getPrototypeOf(obj1) === null;	// true

var proto= {};
var obj2 = Object.create(proto);
Object.getPrototypeOf(obj2) === proto;	// true

var obj3 = Object.create({}, { p: { value: 42 } });
// 属性描述对象中省略了的属性默认为false,所以p是不可写,不可枚举,不可配置的
Object.getOwnPropertyDescriptors(obj3);	// p: {value: 42, writable: false, enumerable: false, configurable: false}

//创建一个可写的,可枚举的,可配置的属性p
var obj4 = Object.create({}, {
	p: { value: 42, writable: true, enumerable: true, configurable: true }
});

//不能同时指定访问器(get和set)和 值或可写属性
var obj4 = Object.create({}, {
	p: {
    	// value: 42,		// 不能和get set同时存在
    	// writable: true,	// 不能和get set同时存在
    	enumerable: true,
    	configurable: true,
    	get: function() { return 10 },
    	set: function(value) { console.log("Setting `p` to", value); }
  }
});

Object.assign() tidak digunakan secara langsung untuk mencipta objek, tetapi ia Ia boleh mencapai kesan mencipta objek, jadi ia juga digunakan di sini sebagai cara untuk mencipta objek. Kaedah

digunakan untuk menyalin nilai semua Object.assign()sifat terbilang

dirinya

daripada satu atau lebih objek sumber kepada objek sasaran. Kembalikan objek sasaran. Object.assign()Jika terdapat sifat yang sama dalam objek sasaran atau objek sumber, sifat objek yang terakhir akan menimpa sifat objek sebelumnya.

Hanya sifat terhitung objek sumber sendiri akan disalin ke objek sasaran. Objek pada prototaip objek sumber tidak diproses.
Object.assign(target, …sources)
    Kaedah ini menggunakan
  • objek sumber dan
  • objek sasaran untuk mendapatkan dan menetapkan nilai.
  • Get[Cadangan berkaitan: Settutorial pembelajaran javascript
]
var o1 = { name: "Tom" };
var o2 = { name: "Jerry" };
var o3 = Object.create(o2, { 	// o2是o3的原型,name: "Jerry"是原型上的属性
	a: { value: 42 }, 			// 不可枚举
	b: { value: 42, writable: false, enumerable: true, configurable: false }, 
  	c: { enumerable: true, get: function() { return 10; } } 
});
var obj1 = Object.assign(o1, o2);
obj1 === o1;		// true
obj1;				// {name: "Tom", b: 42, c: 10}
Object.getOwnPropertyDescriptors(obj1);	// 不会拷贝属性的
/* 	b: {value: 42, writable: true, enumerable: true, configurable: true}
	c: {value: 10, writable: true, enumerable: true, configurable: true}
	name: {value: "Tom", writable: true, enumerable: true, configurable: true} */

var o4 = { a: "a", b: { name: "Tom", age: 18 } };
var obj2 = Object.assign({}, o4);
obj2.b === o4.b;	// true, 浅拷贝,如果源值是一个对象的引用,它仅仅会复制其引用值。

// 合并对象,后面属性覆盖前面属性
var o1 = { a: 1, b: 1 };
var o2 = { b: 2, c: 2 };
var o3 = { a: 3 };
var obj3 = Object.assign({}, o1, o2, o3);
obj3; 			// {a: 3, b: 2, c: 2}

// 基本类型会被转为包装对象,只有字符串的包装对象有自身可枚举属性。
var obj4 = Object.assign({}, "abc", null, true, undefined, 10, Symbol("foo"));
obj4;		// {0: "a", 1: "b", 2: "c"}

// 拷贝过程中发生异常,会终止后续拷贝任务,已拷贝的数据保留
var t = Object.create( {}, { b: { value: 42, writable: false } }); 	// b是只读属性
Object.assign(t, {a: 1}, {a: 2, b: 2, c: 3}, {c: 4});	// Cannot assign to read only property 'b' of object '#<object>'
t;		// {a: 2, b: 42}</object>

Atas ialah kandungan terperinci Mari kita bincangkan tentang cara menggunakan fungsi Object() untuk mencipta objek dalam JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:csdn.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam