【发布时间】:2023-03-15 02:10:01
【问题描述】:
我对 javascript 还很陌生,现在我了解了如何使用上下文调用函数。
这是一个在我脑海中提出问题的简单示例。假设我们有这个例子:
var myObj = {
bar: function() {
console.log("Lets got to the bar!");
}
}
/* how can this be protected from errors,
* if a passed object doesn't contain bar */
function foo()
{
this.bar();
}
foo.call(myObj);
现在,如何保护 foo 不被破坏?在某些 OOP 语言(比如说 Java)中,这可以通过接口来实现。所以在那种情况下,如果被实例化的对象没有实现接口方法,编译器会通过一个错误来保护代码/程序不出错(当然是在这种情况下)。
public interface MyInterface
{
public void bar();
}
public class MyClass implements MyInterface
{
public void bar()
{
System.println("Lets go to the bar");
}
}
MyInterface m = new MyClass();
m.bar(); // if bar isn't implemented the compiler would warn/break
注意:我的 Java 不太好,对于任何语法或其他错误,我深表歉意,但我希望你明白这一点。
总而言之,正如我所见,在这两种情况下,两种语言都可以实现多态性,对吧?现在如果对于 Javascript 示例是这样,如何保护它不被破坏,是否有任何模式或技巧? typeof this.bar === function 有效吗?如果是这样,如果程序员忘记了,谁来保证软件质量,我问这种问题是因为Java有编译器警告程序员错误,JS有类似的东西,一些质量检查工具吗?
【问题讨论】:
-
this.hasOwnProperty('bar') && typeof this.bar === 'function'developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… -
如果我使用原型层次结构,我从文章中看到它不支持它?
标签: javascript oop functional-programming typeof duck-typing