나는 자바 스크립트 (특히 NodeJS)의 컴포지션을 통해 객체 빌드를 둘러 보았고 내 객체를 구축하는 방법을 생각해 냈지만 이것이 미친 짓인지 알아야한다. 일을하는 방법.JS Object composition from prototype functions 추가하기
단순한 버전은 다음과 같습니다. 두 개의 객체가 있는데 두 객체는 두 개의 속성을 가지고 하나는 숫자를 보유하고 다른 하나는 문자열을 보유합니다.
파일 : Cat.js
function Cat() {
this.name = 'Fuzzy Whiskerkins';
this.owner = 'James';
}
module.exports = Cat;
파일 : Car.js
function Car() {
this.color = 'blue';
this.owner = 'James';
}
module.exports = Car;
지금은 이러한 개체의 양쪽에있는 모든 속성에 대한 기본 게터/세터 기능을 추가하고 싶습니다. 또한이 세터에 전달 된 값이 유형과 일치하는지 확인할 수 있기를 원합니다.
파일 : StringProperty.js
module.exports = function(newObject, propertyName) {
newObject.prototype[propertyName] = function(newString) {
if (typeof newString !== 'undefined') {
if (typeof newString !== 'string') {
return;
}
this.properties.[propertyName] = newString;
return this;
}
return this.properties.[propertyName];
}
}
파일 : Cat.js
var StringProperty = require('./StringProperty.js');
function Cat() {
this.properties.name = 'Fuzzy Whiskerkins';
this.properties.owner = 'James';
}
StringProperty(Cat, 'name');
StringProperty(Cat, 'owner');
module.exports = Cat;
파일 대신 나는 다음을 수행 한 이러한 속성의 각 네 개의 프로토 타입 함수를 작성의 Car.js
var StringProperty = require('./StringProperty.js');
function Car() {
this.properties.color = 'blue';
this.properties.owner = 'James';
}
StringProperty(Car, 'color');
NumberProperty(Car, 'owner');
module.exports = Car;
이제 두 개체 모두 필요한 기본 기능을 모두 갖추고있었습니다. 최소한의 코드로, 다른 문자열 속성을 추가해야 할 때마다 추가해야 할 코드의 양이 최소화됩니다.
나는 미친가요? 이 일을하는 더 좋은 방법은/미친 짓인가?
편집 : 내가 수행하려고하는 응용 프로그램은 100 개 이상의 개체가 있으며 각 개체는 10 개 이상의 속성을 갖고 있으며 각 개체에 대해 거의 동일한 코드를 작성해야한다는 생각입니다. 속성이 나와 잘 맞지 않습니다. 나는 속성을 추가하고 getter/setter 함수 (문자열 속성에 대한 다른 길이 제한과 같은 속성 제한에서 분기를위한 옵션 추가)을 생성하는 약간의 코드를 가질 수 있기를 원합니다. JS에서 컴포지션을 통해 객체 생성의 여러 예제를 살펴 보았지만 NodeJS 모듈 구조에 적합하지는 않았습니다.
속성을 직접 가져 오거나 설정하여 아직 사용할 수없는 기능이 있습니까? –
프로토 타입에 할당 된 기능과 속성에 직접 할당 된 값이 모두있는 경우 프로토 타입의 함수는 "숨김"상태가되어 일반적으로 전혀 사용되지 않습니다. 나는 우리가 당신을 더 잘 이끌 수 있도록 당신이 실제로 풀고 자하는 문제를 기술 할 것을 강력히 제안합니다. 나는 당신이 ['Object.defineProperty()'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects)를 통해 완전히 지원되는 getter와 setter를 사용해야한다고 생각합니다./Object/defineProperty) 또는'Object.defineProperties()'를 참조하십시오. – jfriend00
@ Mark_M 새로운 값을 객체에 설정하기 전에 일련의 테스트를 실행하고 싶습니다. 이 테스트는 기본적으로 모든 속성에서 동일하며 동일한 코드를 반복해서 복사하여 붙여 넣기를 거의하고 싶지 않습니다. –