여러 유형의 수학적 개체가 비슷한 연산자를 사용하는 수학 시스템을 생각해보십시오. 배열을 더하거나 복소수를 곱할 수 있습니다. 그러나 이러한 연산자는 기본적으로 존재하지 않으므로 작성해야합니다. 프로토 타입 함수 정의에서 문자열 이름을 만들고 사용할 수 있습니까? 다음 (예정) 코드 고려 : 내가 좋아하는 뭔가를 할 때 표시되는 특정 오류가 발생프로토 타입의 함수에 대한 문자열 이름 만들기
var Interval = function(s,e) {
this.a = Math.min(s,e);
this.b = Math.max(s,e);
};
Interval.prototype["*"] = function(x,y) {
var t = x.a*y.a;
var u = x.a*y.b;
var v = x.b*y.a;
var w = x.b*y.b;
return new Interval(Math.min(t,u,v,w), Math.max(t,u,v,w));
};
Interval.prototype["*="] = function(y) {
var ret = this["*"](this, y);
this.a = ret.a;
this.b = ret.b;
};
참고 다음
var i=new Interval(1,2);
i["*="](i);
그리고 파이어 폭스는 두 번째 줄은 언급되지 않는다는 불평 함수.
많은 기능 ("*=","-","^",...
)이 있습니다. 이 이름으로 직접 저장하는 것이 좋겠지 만 위의 방법을 시도하면 항상 실패합니다. "... 함수가 아닙니다."등. Interval.prototype.ops = { "*": function(x,y) {...}};
과 같은 버퍼 객체를 넣을 수는 있지만, 그럴 수는 없다. 이 작업을 수행하는 더 좋은 방법이 있습니까?
편집는 예상대로
이 메커니즘은 작동합니다. 작동하지 않는 것은 생성자 내에서 프로토 타이핑 된 함수를 호출하려고 시도하는 것입니다. 예를 들어, this["*="](this);
행이 var Interval = function(s,e) { ... };
함수 정의 내에 나타날 경우. 내가 아니면 내가 물어 때 내 콘솔에서 다음
var i = function() { console.log("foo"); };
i["*"] = function() { console.log("bar"); };
그리고, 내가 얻을 [ "*"] : 당신이 프로토 타입을 피할 경우
Interval 생성자에 전달 된 타입과 전자가 무엇인지 모르므로 min은 함수가 아닙니다. 또한 코드에서 min 및 max가 반환하는 형식을 나타내지 않습니다. 'var one = new Interval (?,?); ... one ['* = '] (two)'이 문제는 프로토 타입 함수와 관련이 없지만 인수를 프로토 타입 함수 또는 min 및 max의 반환 값에 전달했습니다. – HMR
@hmr : 사실, 필자의 예제는 내가 포함하는 코드보다 추상화되어 있습니다. 수정되었습니다 ... – abiessu
이것은 잘 작동합니다."... is not a function"오류가 발생했을 때 시도한 정확한 코드를 보여주십시오. – Bergi