2017-05-31 10 views
0

私はきれいなコードについてのコースをやってきました。 「stringly」と入力されていることコースの状態が(講座は、C#を使用しています)読みやすさに悪いことだとは異なる構造を使用することをお勧めします:Javascriptで "stringly"と入力しないようにするにはどうすればいいですか?

//Dirty 
if (employeeType == "manager") 

//Clean 
if (employee.Type == EmployeeType.Manager) 

私の質問は:どのように私はJavaScriptでそのような構造を実現することができますか?

このようなオブジェクトを作成する必要がありますか?

EmployeeType = { 
    Manager: "manager" 
} 

employee = { 
    Type: : "manager" 
} 

これを行うよりよい方法はありますか?

+0

jsは緩いタイピングですので、 'employeeType ==" manager "'(REF:https://stackoverflow.com/questions/359494/)の代わりに 'employeeType ===" manager "を使用してください。オペレータ対javascriptの比較で使用するべきである) –

+0

jsの緩いタイピングのために、これを見てください:http://blog.jeremymartin.name/2008/03/understanding-loose -typing-in.html –

+2

どのように「ゆるいタイピング」が関係しているかわからない! –

答えて

0

ES6とクラスを使用する場合は、instanceofを使用できます。

class Animal { 
    greet() { 
     // Do nothing. 
    } 
} 

class Dog extends Animal { 
    greet() { 
    console.log("Woof!"); 
    } 
} 

class Cat extends Animal { 
    greet() { 
    console.log("Meow!"); 
    } 
} 

let dog = new Dog(); 

console.log(dog instanceof Animal); // Returns true 
console.log(dog instanceof Dog); // Returns true 
console.log(dog instanceof Cat); // Returns false 
console.log(dog instanceof Object); // Caveat: returns true! 

またはES5で

function Animal() { 
} 

Animal.prototype.greet = function() { 
    // Do nothing 
} 

function Dog() { 
    Animal.call(this); 
} 

Dog.prototype = Object.create(Animal.prototype); 

Dog.prototype.greet = function() { 
    console.log("Woof!"); 
} 

function Cat() { 
    Animal.call(this); 
} 

Cat.prototype = Object.create(Animal.prototype); 

Cat.prototype.greet = function() { 
    console.log("Meow!"); 
} 

var dog = new Dog(); 

console.log(dog instanceof Animal); // Returns true 
console.log(dog instanceof Dog); // Returns true 
console.log(dog instanceof Cat); // Returns false 
console.log(dog instanceof Object); // Caveat: returns true! 

注:instanceofはES6の機能ではありませんが、クラスがあります。 instanceofをES5スタイルのプロトタイプで使用できます。詳細については、see MDN

+1

ES5に相当するのは、各インスタンス上で直接ではなく '.prorotype'に' greet() 'メソッドを作成することでしょうか?いずれにせよ、これは、従業員がマネージャであるかどうかを知る方法を尋ねた質問に答えるものではありません。なぜなら、それを表現するオブジェクト指向の方法は、 'type'プロパティを持つ' Employee'のインスタンスになるか、 'Employee'から継承する' Manager'です。 – nnnnnn

+0

@nnnnnnあなたはES5プロトタイプを正しく理解しています。私はそれを更新しました。継承を含める必要性を見ていませんでした(OPは "stringly"型の代わりに 'instanceof'をどのように使うことができるかを考えていただけでしたが)それを含むように答えを更新しました。 –

関連する問題