小鸭在Javascript中input

有人能给我一个鸭子键入inheritance的例子吗? 我正在探索OO JavaScript,我听说过鸭子打字,但看不到它在JavaScript中使用的任何示例。

第二个链接给出了一个在js中使用鸭子打字的模式的例子。 不是说我推荐这样做,但是…好吧,你问了。 ;)

在用面向对象编程语言进行计算机编程时,duck typing是dynamictypes的一种风格,其中对象当前的一组方法和属性决定了有效的语义,而不是从特定类的inheritance或特定接口的实现。

维基百科 – 鸭子打字

最简单的方法是非正式地定义合同,并简单地依靠界面两侧的开发人员来了解他们在做什么。 戴夫·托马斯(Dave Thomas)给出了这种方法的名字,叫做“鸭子打字”,如果它像鸭子一样走路,它像鸭子一样呱呱叫,那么它就是一只鸭子。 与我们的Shape界面类似,如果它可以计算面积和周长,那么它是一个Shape

JavaScript接口和鸭子键入

“ 鸭子打字 ”的规则是

如果它看起来像一只鸭子,像鸭子一样游泳,像一只鸭子一样呱呱叫,那么它可能是一只鸭子。

在一个基于类的面向对象编程语言(例如C ++)中,为了使两个对象看起来像一个鸭子,你必须从一个普通的“接口”类inheritance他们的类,所以编译器会让你调用它们的duck方法。 这就是所谓的强types。

现在,这是如何在Javascript中完成的:

 var duck = { appearance: "feathers", quack: function duck_quack(what) { print(what + " quack-quack!"); }, color: "black" }; var someAnimal = { appearance: "feathers", quack: function animal_quack(what) { print(what + " whoof-whoof!"); }, eyes: "yellow" }; function check(who) { if ((who.appearance == "feathers") && (typeof who.quack == "function")) { who.quack("I look like a duck!\n"); return true; } return false; } check(duck); // true check(someAnimal); // true 

看, check函数检查传递的对象是否看起来像一个鸭(它检查外观和它的能力嘎嘎)。 我们将两个不同的对象传递给它,它将在两者上都返回true 。 除了外观和嘎嘎声这些可能是完全不同的东西,但在这个特定的checkfunction,他们行为相同的方式(有一个共同的接口),他们都看起来像一个“鸭”。 我们可以在这两个对象上调用quack方法(谁在乎他们真正的是什么)。