最近在学习 JS 的面向对象实现,看「Javascript 设计模式」看不明白 JS 关于接口是怎么实现的。
比如有一个方法是这样的:
var say = function(){
alert("Hello");
}
有三个类,分别是 People、Dog、Alien,其中 People 和 Alien 都可以 say()
,那么如何用 JS 去实现这个接口呢?
Ps:也不知道我对于「接口」的理解是否正确,我的理解是多个类同时都会用到的公共方法,如有错误请指正……
最近在学习 JS 的面向对象实现,看「Javascript 设计模式」看不明白 JS 关于接口是怎么实现的。
比如有一个方法是这样的:
var say = function(){
alert("Hello");
}
有三个类,分别是 People、Dog、Alien,其中 People 和 Alien 都可以 say()
,那么如何用 JS 去实现这个接口呢?
Ps:也不知道我对于「接口」的理解是否正确,我的理解是多个类同时都会用到的公共方法,如有错误请指正……
function people() {
this.name = arguments[0]||'';
people.prototype.say = function(something) {
alert(something||'hello')
}
}
var alien = new people('alien');
alien.say('I can say!');
people.prototype.say('I can say too!');
接口是由於靜態語言的緣故才需要的。比如只有 sayable 的,纔可以調用 say,這在編譯時就可以檢查。
而 js 是動態語言。
其實你在 js 中完全可以拋棄傳統面向對象語言當中的詞彙和思路。
面向對象可以不需要類,不需要接口,不需要繼承。。。
面向對象只是一種對事物本質的抽象。
而 js 實現這種抽象使用的語言,叫做原型。
(function() {
"use strict";
var Obj = function() {
function Obj(name) {
this.name = name;
}
Obj.prototype = Object.create(null);
Obj.prototype.constructor = Obj;
Obj.prototype.toString = function() {
return Object.getPrototypeOf(this).name;
};
return Obj;
}();
var Person = function() {
function Person(name) {
this.name = name;
}
Person.prototype = new Obj("Person");
Person.prototype.constructor = Person;
Person.prototype.greeting = function() {
return "Hello, my name is " + this.name + ". ";
};
return Person;
}();
var Programmer = function() {
function Programmer(name) {
this.name = name;
}
Programmer.prototype = new Person("Programmer");
Programmer.prototype.constructor = Programmer;
Programmer.prototype.toString = function () { return Obj.prototype.toString.call(this) + " (Coder)"; }
Programmer.prototype.greeting = function() {
return "Hello, my name is " + this.name + ". " + "I'm a " + this + ". ";
};
return Programmer;
}();
var p = new Person("Robert"), q = new Programmer("James");
console.log(p.greeting());
console.log(q.greeting());
}());
13 回答12.9k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
3 回答1.3k 阅读✓ 已解决
下面有一段在JS中使用接口的代码,不知道是不是你在《JavaScript设计模式》中看到的,该段代码模拟了接口,支持多个接口的情况。
摘自
使用方法
Demo