什么是鸭子类型javascript
javascript的面向对象java
封装编程
继承设计模式
多态闭包
原型app
this指向函数
callthis
applyprototype
band设计
js中的闭包
什么是高阶函数
在写面向对象编程思想-设计模式中的js部分的时候发现不少基础知识不了解的话,是很难真正理解和读懂js面向对象的代码。为此,在这里先快速补上。而后继续咱们的面向对象编程思想-设计模式。
什么是鸭子类型
javascript是一门典型的动态类型语言,也就弱类型语言。
那什么是鸭子类型:【若是它走起路来像鸭子,叫起来也是鸭子,那么它就是鸭子】
var 鸭子 = {
走路: function () { },
咕咕咕: function () { }
}
var 鹦鹉 = {
走路: function () { },
咕咕咕: function () { }
}
这只鹦鹉一样有“走路”和“咕咕咕”的方法,那在js的世界里就能够把它当成鸭子。
能够这样调用:
var 鸭子们 = [];
鸭子们.push(鸭子);
鸭子们.push(鹦鹉);
for (var i = 0; i < 鸭子们.length; i++) {
鸭子们[i].走路();
}
因此js的世界没有抽象和接口,但能够约定“咱们都是鸭子”。
javascript的面向对象
javascript不只是直译式脚本语言、动态类型、弱类型语言、函数为一等公民的语言,它仍是基于原型的面向对象语言。面向对象三大特性:封装、继承、多态,下面咱们用js分别实现。
封装
var Person = (function () {
var sex = "纯爷们";
return {
name: "农码一辈子",
getInfo: function () {
console.log("name:" + this.name + ",sex:" + sex);
}
};
})();
虽然老的js语法没有提供private等关键字,可是咱们能够利用闭包来实现私有字段,达到封装的目的。
继承
字面量表示:
var Person = {
name: "农码一辈子",
getName: function () {
console.log(this.name);
}
};
var obj = Person;
obj.getName();
函数构造器:
var Person = function () {
this.name = "农码一辈子";
}
Person.prototype.getName = function () {
console.log(this.name);
}
var obj = function () { };
obj.prototype = new Person();//obj继承于Person
var o = new obj();
o.getName();//直接调用原型中的getName(相似于C#中的调用父类方法)
多态
对于多态,其实上面的鸭子类型已经表现的很清楚了。
var 鸭子们 = [];
鸭子们.push(鸭子);
鸭子们.push(鹦鹉);
for (var i = 0; i < 鸭子们.length; i++) {
鸭子们[i].走路();//对于鹦鹉来讲,它多是跳着走。对于鸭子来讲,它可能左右摇摆着走。这就是多态的表现。
}
对于鹦鹉来讲,它多是跳着走。对于鸭子来讲,它可能左右摇摆着走。这就是多态的表现。