JS之面向对象

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 --面向对象知识点总结

  1. 对象
  2. this
  3. 程序设计
  4. 构造函数
  5. 对象实例
  6. 原型链
  7. prototype 属性
  8. constructor 属性
  9. 原型式继承
    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. 构造函数模式
  3. 原型模式
  4. 构造函数与原型模式的混合使用
  5. 原型链继承
  6. 借用构造函数继承

此段详解构造函数模式
使用构造函数步骤:
1.创建一个新对象
2.把构造函数的作用域给新对象,也就是this指向新对象
3.给新对象添加属性
4.返回新对象
。。。demo后续更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值