2014-12-09 1 views
0

Да, я знаю, что использовал термины, которые не применяются вообще или как они применяются к языкам ООП.Как определить метод расширения и вызвать его как экземпляр и статический метод?

Когда я определяю метод расширения в C#, я могу назвать его методом экземпляра foo.call(bar) или Foo.call(foo,bar). Я определил метод «расширения» для Arrayequals(secondArray,comparer), который проверяет равенство элементов. Я называю это сейчас myArray1.equals(myArray2).

Однако я хотел бы назвать это также как Array.equals(myArray1,myArray2).

Как сделать возможным JS-way?

+0

На каком языке вы спрашиваете? – SLaks

+0

@SLaks, целевой? Javascript. – greenoldman

ответ

1

Чтобы уточнить ответ SLaks на примере: вы можете предоставить «статический» метод, а затем предоставить метод экземпляра, который явно передает экземпляр статическому методу. Выход

var Obj = function(){ 
    var _this = this; 
    this.x = 5; 
    this.equals = function(other){ 
     return Obj.equals(_this, other); 
    } 
} 
Obj.equals = function(obj1, obj2){ 
    return obj1.x == obj2.x; 
} 

obj1 = new Obj(); 
obj2 = new Obj(); 
console.log(obj1.equals(obj2)); 
console.log(Obj.equals(obj1, obj2)); 

консоли:

true 
true 
+0

Большое спасибо за пример! – greenoldman

1

Вам необходимо сделать два отдельных метода; один на прототипе и один - на функцию.

Один из них может просто вызвать другой.

1

Аналогично ответ OozeMaster, вы также можете записать его в более моды «ОО» этот путь (но все-таки, вы должны явно объявить «статический» и членские методы):

var Operation = (function() { 
    function Operation(firstOperand) { 
     this.firstOperand = firstOperand; 
    } 
    Operation.prototype.add = function (other) { 
     console.log(this.firstOperand + other); 
    }; 
    Operation.add = function (first, second) { 
     console.log(first + second); 
    }; 
    return Operation; 
})(); 


Operation.add(1, 2); // prints 3 
var op = new Operation(3); 
op.add(4); // prints 7 

PS: это тот тип кода, который генерируется Typcript при написании статических методов. Если вы хотите написать JS, это способ ООП, вы можете взглянуть на машинопись: http://www.typescriptlang.org/

+0

Благодарим вас за подсказку о TS. Я наблюдаю, как А. Хейльсберг рассказывает о TS (Google TechTalks) прямо сейчас :-). – greenoldman

Смежные вопросы