有人能给我一个关于Javascript中Duck Typing继承的例子吗?我正在探索OO javascript,我听说过鸭子打字,但是看不到它在javascript中使用的任何例子.
小智 123
" 鸭子打字 " 的规则是
如果它看起来像一只鸭子,像鸭子一样游泳,像鸭子一样嘎嘎叫,那么它可能是一只鸭子.
在基于类的面向对象编程语言(例如C++)中,要使两个对象看起来像鸭子,你必须从一个通用的"接口"类继承它们的类,所以编译器会让你调用duck
它们的方法.这被称为强类型.
现在这是在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
Run Code Online (Sandbox Code Playgroud)
看,check
函数检查传递的对象是否看起来像一个鸭子(它检查外观及其'嘎嘎叫的能力).我们将两个不同的对象传递给它,它将返回true
两者.除了外观和嘎嘎声之外,这些可能是完全不同的东西,但在这个特殊的check
功能中它们的行为方式相同(有一个共同的界面),它们看起来都像一个"鸭子".我们可以quack
在两个对象上调用该方法(以及谁在乎它们的真实含义).
Dag*_*bit 25
第二个链接给出了js中类似鸭子的模式的示例.不是说我建议这样做,但是......好吧,你问过它.;)
在使用面向对象编程语言的计算机编程中,duck typing是一种动态类型,其中对象的当前方法和属性集确定有效语义,而不是从特定类或特定接口的实现继承.
最简单的方法是非正式地定义合同,并简单地依赖于接口每一侧的开发人员来了解他们正在做什么.戴夫托马斯已经将这种方法命名为"鸭子打字" - 如果它像鸭子一样走路,它像鸭子一样嘎嘎叫,那么它就是一只鸭子.与我们的
Shape
界面类似 ,如果它可以计算一个区域和一个周长,那么它就是一个Shape
.
在JavaScript中鸭子输入的一个例子是iterables。JavaScript实际上没有称为的类型Iterable
,但是它有一个对象的定义,该定义是可迭代的。
为了可迭代,对象必须实现@@ iterator方法
这是鸭类输入的要求。如果对象实现接口中定义的方法,则可以在接受接口类型的地方使用该对象。对于可迭代对象,循环中就是这种情况
for (let value of iterable) {
}
Run Code Online (Sandbox Code Playgroud)
和数组
[...iterable]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
27091 次 |
最近记录: |