JavaScript의 구조체
If you like to use it, I've just published it as npm package.npm i makestruct
구조체란 무엇입니까?
구조체는 데이터 구조를 구축하는 데 사용됩니다. 이러한 구조는 관련 데이터를 함께 그룹화하는 데 사용됩니다.
프로그래밍 언어에 따라 배후에서 작동하는 방식에 차이가 있지만 재미있는 점은 JavaScript에는 구조체가 없다는 것입니다.
JS에서 사용자 정의 데이터 구조를 생성하려는 경우 일반적으로 한 가지 작업을 수행합니다. 개체 만들기.
const user = {
id: 0,
name: '',
country: '',
pets: [],
}
하지만 그렇게 할 다른 방법이 있습니까?
JavaScript에서 "구조체"를 동적으로 생성하는 함수를 만들어 봅시다!
/**
* @constructor Generates a constructor for a given data structure
* @param {string} keys separated by a comma + whitespace. struct('id, name, age')
* @returns {constructor} Constructor for the new struct
*/
function makeStruct(keys) {
if (!keys) return null;
const k = keys.split(', ');
const count = k.length;
/** @constructor */
function constructor() {
for (let i = 0; i < count; i++) this[k[i]] = arguments[i];
}
return constructor;
}
어떻게 작동합니까?
쉼표 + 공백으로 구분된 문자열을 사용하고 원하는 구조에 대한 생성자를 생성하므로 이제 이 동적으로 생성된 생성자를 사용하여 개체를 인스턴스화할 수 있습니다.
용법:
const user = new makeStruct("id, name, country");
const johnny = new user(1, 'John', 'UK');
console.log(johnny.name); // john
속성에 복잡한 구조를 할당할 수도 있습니다!
const user = new makeStruct("id, name, country, pets");
const pepe = new user(1, 'Pepe', 'ES', ['Baxter', 'Flurfrils']);
console.log(pepe.pets); // ['Baxter', 'Flurfrils']
또는 다른 내부에 구조체를 추가합니다.
/**
* @typedef UserInfo
* @property {string} phone
* @property {number} age
* @property {string} hairColor
* @constructor
*/
/** @type {ObjectConstructor|any} */
const UserInfo = new makeStruct('phone, age, hairColor');
/** @type {UserInfo} */
const extraInfo = new UserInfo('555-777-888', 31, 'blonde');
/**
* @typedef User
* @property {number} id
* @property {string} name
* @property {string} country
* @property {UserInfo} info
* @constructor
*/
/** @type {ObjectConstructor|any} */
const User = new makeStruct('id, name, country, info');
/** @type {User} */
const John = new User(1, 'John', 'US', extraInfo);
이제 다음을 수행할 수 있습니다.
John.country // 'US'
John.info.phone // '555-777-888'
좋아 좋아 마지막에 개체를 생성하지만 JavaScript는 Python 및 기타와 마찬가지로 개체 기반 언어이므로 사실 모든 것이 개체입니다.
그리고 이것이 재미없다고 말할 수 없습니다!
내 콘텐츠가 마음에 드십니까?
Reference
이 문제에 관하여(JavaScript의 구조체), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/joelbonetr/structs-in-javascript-1p9l
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
const user = {
id: 0,
name: '',
country: '',
pets: [],
}
/**
* @constructor Generates a constructor for a given data structure
* @param {string} keys separated by a comma + whitespace. struct('id, name, age')
* @returns {constructor} Constructor for the new struct
*/
function makeStruct(keys) {
if (!keys) return null;
const k = keys.split(', ');
const count = k.length;
/** @constructor */
function constructor() {
for (let i = 0; i < count; i++) this[k[i]] = arguments[i];
}
return constructor;
}
const user = new makeStruct("id, name, country");
const johnny = new user(1, 'John', 'UK');
console.log(johnny.name); // john
const user = new makeStruct("id, name, country, pets");
const pepe = new user(1, 'Pepe', 'ES', ['Baxter', 'Flurfrils']);
console.log(pepe.pets); // ['Baxter', 'Flurfrils']
/**
* @typedef UserInfo
* @property {string} phone
* @property {number} age
* @property {string} hairColor
* @constructor
*/
/** @type {ObjectConstructor|any} */
const UserInfo = new makeStruct('phone, age, hairColor');
/** @type {UserInfo} */
const extraInfo = new UserInfo('555-777-888', 31, 'blonde');
/**
* @typedef User
* @property {number} id
* @property {string} name
* @property {string} country
* @property {UserInfo} info
* @constructor
*/
/** @type {ObjectConstructor|any} */
const User = new makeStruct('id, name, country, info');
/** @type {User} */
const John = new User(1, 'John', 'US', extraInfo);
John.country // 'US'
John.info.phone // '555-777-888'
Reference
이 문제에 관하여(JavaScript의 구조체), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/joelbonetr/structs-in-javascript-1p9l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)