• 主页
  • 归档
  • 分类
  • 照片墙
所有文章 友情链接 关于我

  • 主页
  • 归档
  • 分类
  • 照片墙
目录,不存在的…

面向对象编程

2017-12-20 20:26:42
总字数 764
预计阅读时间 2 分钟

面向对象的两个基本概念

  1. 类 : 是对象的类型模板 , 是一种抽象 , 并不表示实体
  2. 实例 : 是根据类创建的对象 , 表示某个具体的事物 类和实例是大多数面向对象编程语言的基本概念。

不过,在JavaScript中,这个概念需要改一改。JavaScript不区分类和实例的概念,而是通过原型(prototype)来实现面向对象编程。

既然没有类的概念 , 我们就需要用某个对象来模拟一个类了

1
2
3
4
5
6
7
8
9
10
11
var person = {
name : "Unnamed",
run : function(){
console.log(this.name + "is running...");
}
};
//现在我们可以把person来当做一个原型对象, 来创建一个具体的"人"
var xiaoming = {
name : "小明"
};
xiaoming.__proto__ = person;

JavaScript当中的原型链 , 既可以模拟由类创建实例的关系
也可以模拟继承的关系
原型对象本身也可以有原型对象 , 从而构成原型链
默认原型对象是Object
当然在运行中也可以随时改变某个对象的原型对象

以上代码主要用于表示原型链的实际关系 , 实际编程当中最好不要直接去修改对象的__proto__
Object.create()方法可以传入一个原型对象 , 用来构造出一个新对象

1
2
3
4
var xiaoming = Object.create(person);
xiaoming.name = "小明";
//验证原型对象
xiaoming.__proto__ === person; //true

当我们访问某个对象的属性时 , 例如obj.xxx
js引擎会先在该对象上查找该属性 , 如果没找到 , 就会到原型对象上去找 , 也就是顺着原型链一直向上回溯 , 直到Object.prototype对象 , 如果还没有 , 那么就是undefined

除此之外 , 也可以使用构造函数来创建对象
构造函数本身和普通的函数没什么区别 , 只是用new关键字来调用 , 就会返回一个需要构建的对象

1
2
3
4
5
6
7
8
9
function Student(){
this.name = "sookie";
this.age = 18;
this.say = function(){
alert("Hello");
}
}
var stu = new Student();
stu.say();

如果按照普通函数的调用方式执行调用 , 其中的this就表示window对象
那么其中代码的效果就是定义了几个全局属性
如果使用 new 来调用该函数 , 那么它绑定的this就指向新创建的对象
并默认返回this ( 不需要写return )

使用这种方式创建的对象还从原型上获得了一个 constructor 属性
指向这个构造函数本身
constructor

—> 另外这个对象中有一个 say 属性 , 它是一个函数
在这种情况下 , 这个函数是属于stu对象的 , 并不属于该对象的原型
如果使用原型创建了多个对象 , 其中就会有很多重复的函数
所以可以把这个函数放入到Student的prototype当中

1
2
3
4
5
6
7
8
9
10
11
function Student(){
this.name = "sookie";
this.age = 18;
}
Student.prototype.say = function(){
alert("Hello");
}
var stu1 = new Student();
var stu2 = new Student();
console.log(stu1.say == stu2.say)
//true

prototype

  • JavaScript
  • JavaScript

扫一扫,分享到微信

Maven(6)-可运行jar打包
3.2、地理位置索引 
© 2024 夏夜梦星辰
鲁ICP备19028444号
Power By Hexo
  • 所有文章
  • 友情链接
  • 关于我
{{searchItem.query}}
标签: 分类:
  • maven
  • 持续集成
  • JMS
  • 线程
  • JavaScript
  • ECMAScript6
  • 单元测试
  • Promise
  • Web Worker
  • 函数
  • prototype
  • 模块化
  • 正则表达式
  • 数据库
  • MongoDB
  • 索引
  • 集群
  • 全文检索
  • flutter
  • dart
  • git
  • 版本控制
  • linux
  • shell
  • docker
  • nginx
  • jenkins
  • opencv
  • vim
  • react
  • react native
  • 前端
  • css
  • HTML5
  • Hexo
  • sass
  • Three.js
  • TypeScript
  • Vue
  • 组件化
  • base64
  • webpack
  • nodejs
  • gulp
  • TensorFlow
  • 机器学习
  • 算法
  • 动态规划
  • 数据结构
  • Java
  • JavaScript
  • MongoDB
  • flutter
  • Git
  • linux
  • react
  • 前端杂烩
  • 男生女生
  • 算法
  • 十年饮冰,难凉热血
  • †少女癌†
  • 猫与向日葵
  • coderfun
  • JENKINS
  • API管理后台
愿你最终能接纳每一面每一种的自己
独自活着便是团圆