JS面向对象
面向对象特性:封装,继承,多态
对象:属性、方法
通过调用系统的Object构造函数创建对象: var 对象名字=new Object();
设置属性的值语法:对象.属性名字=值 obj.name = ‘zhangsan’
对象方法的语法:对象.方法名字=匿名函数 obj.eat = function(){}
自定义构造函数创建对象: function Obj (){}
把this设置为当前对象
设置该对象的属性和方法的值
把this作为当前对象返回
function Person(name,age){
this.name=name;
this.age=age;
this.sayHello=匿名函数;
}
var per=new Person("zhangsan",23);
自变量方式创建对象
语法:
var obj={
属性名字:值,
属性名字:值,
方法名字:匿名函数
};
var obj = {
name: "zhangsan",
age: 10,
sayHi: function () {
console.log("我叫:" + this.name);
}
obj.sayHi();
对象中属性或方法的调用
对象中的属性或者是方法,可以通过点语法的方式获取或者设置,同时可以使 用键值对的方式进行设置或者是获取
对象的遍历–详解见另一篇博客
面向对象编程
面向对象编程可以看做是使用一系列对象相互协作的软件设计,在oop中,每个对象都能接收消息,处理数据和发送信息给其他对象,每个对象都可以看做是一个拥有清晰角色和功能的独立的小机器
面向对象编程术语:
Namespace 命名空间,
允许开发人员在一个独特,应用相关的名字的名称下捆绑所有功能的容器
class 类
定义对象的特征,是对象的属性和方法的模板定义
object 对象
定义对象的特征,是对象的属性和方法的模板定义
property 属性
对象的特征,比如颜色
method 方法
对象的能力/功能,比如行走
constructor 构造函数
对象初始化的瞬间,被调用的方法,通常它的名字与包含它的类一致
inheritance 继承
一种把数据和相关方法绑定在一起使用的方法
abstraction 抽象
结合复杂的继承,方法,属性的选项能够模拟现实的模型
polymorphism 多态
不同类可以定义相同的方法或属性
命名空间
命名空间是一个容器,
可以让开发人员在一个独特的,特定于应用程序的名称下捆绑所有的功能
标准内置对象
js中核心对象:math,object,array,string对象
自定义对象
类
js是一种基于原型的语言,没有类的声明语句,但是可以用方法作类,可以自己进行定义类
eg1,定义了一个person的类
function Person() { }
// 或
var Person = function(){ }
eg2,定义了一个lesson的类
function lesson() { }
// 或
var lesson = function(){ }
对象,–类的实例
使用new obj创建对象obj的新实例,将结果obj类型赋值给一个变量是为了方便之后调用
eg、定义一个名为Lesson的类,然后创建两个Lesson的实例,lesson1 和 lesson2
function Lesson() { }
var lesson1 = new Lesson();
var lesson2 = new Lesson();
构造器
在实例化的时候,构造器被调用 == 也就是对象实例被创建的时候,构造器被调用
构造器是对象中的一个方法
在js中,函数可以作为构造器被使用,所以不需要特别定义一个构造器方法,每个声明的函数
都可以在实例化后被调用执行
构造器常用来给对象的属性赋值或者为调用函数准备
属性–对象属性
属性就是类中包含的变量,每个对象实例有若干属性,为了正确继承,属性被定义在类的原型属性(函数)中
使用关键字this调用类中的属性,this是对当前对象的引用
方法–对象属性
方法和属性相似
不同的是:一个是函数,另一个可被定义为函数
定义一个方法,需要将方法函数赋值给类的prototype属性,这个赋值给函数的名称就是用来给对象在外部抵用它的时候使用
下面案列,我们给Lesson 类定义了一个方法 sayStart (),并调用它
function Lesson (firstName) {
this.firstName = firstName;
}
Lesson.prototype.sayStart = function() {
alert("Hello, I’m " + this.firstName);
};
var lesson1 = new sayStart (“Alice”);
var lesson2 = new sayStart (“Bob”);
// call the sayStart sayStart method.
lesson1.sayStart (); // alerts “Hello, I’m Alice”
lesson2.sayStart (); // alerts “Hello, I’m Bob”
在js中方法通常是一个,绑定到对象中的普通函数,意思是可以在context之外被调用
继承
在js中,继承是通过赋予子类一个父类的实例并转么划子类来实现
详见另一篇继承专讲
封装
对于所有继承自父类的方法,只需要在子类中定义想改变的即可
抽象
抽象是允许模拟工作问题中通用部分的一种机制,可以通过继承(具体化)或组合来实现
js通过继承实现具体化,通过让类的实例是其他对象的属性值来实现组合
多态
不同的类可以定义具有相同名称的方法,方法作用于锁在的类中,并且仅仅只在两个类不是父子关系时成立
jianshu --面向对象知识点总结
- 对象
- this
- 程序设计
- 构造函数
- 对象实例
- 原型链
- prototype 属性
- constructor 属性
- 原型式继承
10.面向对象的几种写法
10.类
对象
对象:一个包含相关数据和方法的集合(由变量和函数组成,称之为对象里的属性和方法)
eg.
var person = {
name: ‘zhangsan’,
sayhello:function(){}
}
面向对象中this指向
—> 会在另一篇文章中详细介绍js中this指向总结大全
在对象里,this指向当前代码运行时的对象
面向对象的程序设计
OOP基本思想:在程序中使用对象表示现实世界模型,并提供一个简单的方法访问它的功能
在js中,用构造函数来实现面向对象编程
定义一个类 构造函数,传参就可以
原型链
js被描述为一种基于原型的语言,另一篇详解原型链
prototype属性
继承成员被定义的地方,继承的属性和方法是定在prototype属性之上的,然后每个对象实例都具有constructor 属性,指向创建该实例的构造器函数
原型对象和构造函数
obj是构造函数,obj.prototype是构造函数的原型对象
构造函数本身的属性和方法无法被共享,但是冤案性对象的属性和方法可以被所有实例对象共享
类
定义对象的特征,相当于对象属性和方法模板定义,每一个新对象,都是类的实例
继承如何实现
在js中,继承是通过赋予子类一个父类 的实例并专门化子类来实现,可以用 Object.create 实现继承.
面向对象的几种写法
会在另一篇博客详细更新面向对象写法
- 工厂模式
- 构造函数模式
- 原型模式
- 构造函数与原型模式的混合使用
- 原型链继承
- 借用构造函数继承
此段详解构造函数模式
使用构造函数步骤:
1.创建一个新对象
2.把构造函数的作用域给新对象,也就是this指向新对象
3.给新对象添加属性
4.返回新对象
。。。demo后续更新