笔记八、JavaScript 面向对象

  • 类:对一系列具有相同特征和行为的事物的抽象的集合
  • 对象:类的一个具体实例

一、 面向对象编程

(一)对象的创建

1.{ }

JavaScript用一个花括号 { } 表示一个对象,对象中的成员通过键值对 key: value (键与值以冒号分割) 的形式进行声明,成员与成员之间通过逗号来分隔。如下,定义一个学生对象 liming:

var liming = {
  name: '李明', // 姓名
  gender: 'male', // 性别
  examination: function() {
    console.log('参加...');
  }
};

2、new Object()

创建JavaScript对象,还可以通过 Object 的构造函数和new关键字来构造JavaScript对象

var linhai = new Object();
linhai.name = '林海'; // 姓名
linhai.gender = 'male'; //性别
linhai.examination = function () {
    console.log('参加...');
};

提示:

  • 对象中未赋值的属性,它的值为 undefined
  • 在JavaScript中,对象可以被理解为是一系列属性的集合本质上是一种无序的集合数据类型,它由若干键值对所组成。即是一个包含相关数据和方法的集合。

3、构造函数(构建函数) 

(1)通过创建一个构造函数来定义对象的类型(构造函数的首字母一般采取大写方式

(2)通过 new 创建对象实例 

function Student(stuNo, major, name, gender, birth, examination) {
  this.name = name;
  this.gender = gender;
  this.examination = examination;
}
var xiaochi = new Student('小池', 'female', function(){console.log('参加...')});
console.log(xiaochi.name); // 访问属性
xiaochi.examination(); // 调用方法

4、create( ) 

使用 JavaScript内嵌的方法 create() 来创建对象,它允许我们 基于现有对象取创建新的对象

var xiaochi = new Student('小池', 'female',function () {
    console.log('参加...')
});
var ming = Object.create(xiaochi)
console.log(ming.name); // 小池
ming.examination(); // 参加考试...

二、对象原型 

JavaScript 一种基于原型的语言。在JavaScript中,每个对象都拥有一个原型对象,对象以其原型为模板、从原型中继承方法和属性。 原型对象也可能拥有原型,并从中继承方法和属性,一层一层、以此类推,这种关系常被称为 原型链

更准确地说,这些属性和方法是被定义在 Object 的构造器函数之上的 prototype 属性上,而非对象实例本身。

在 Javascript中,函数可以有属性。 每个函数都有一个特殊的属性叫作原型(prototype),我们可以通过 prototype 属性来访问原型

   // 函数声明
           function doSomething() {}
           console.log(doSomething.prototype);

   // 函数表达式
           var doSomething = function () {};
           console.log(doSomething.prototype);

instance 的 __proto__ (proto左右各有两个下划线) 属性就是 doSomething.prototype
当我们访问 instance 的属性时:

  1. 浏览器首先会查找 instance 是否具有这个属性。

  2. 如果没有,浏览器接着会在 instance 的 __proto__中去查找这个属性。如果 instance 的 __proto__ 有这个属性,那么这个属性就会被 instance 引用。

  3. 如果instance 的 __proto__ 也没有这个属性,那么浏览器就会再去查找 instance 的 __proto__ 的 __proto__ 是否有这个属性,依次一层一层沿着这条 “原型链“ 往上查找。

  4. 最后,如果原型链上的所有的 __proto__ 都被找完了, 浏览器所有已经声明的 __proto__ 上都不存在这个属性,那这个属性的值就为 undefined。

  5. 默认情况下,所有函数的原型属性 __proto__ 就是 window.Object.prototype 。并且,原型链中的方法和属性没有被复制到其他对象中,它们需要通过前面所说的原型链的方式才能被访问。

1. prototype(原型):

每个函数对象 都有一个特殊的属性,称为 prototype。这是一个对象,拥有该函数实例的共享属性和方法。
函数的 prototype 是一个对象,可以包含该函数实例的 共享属性和方法

2. proto(隐式原型):

每个实例对象 都有一个指向它们构造函数的 prototype 的指针,称为 __proto__。它是一个隐藏属性。
实例对象的 __proto__ 指向了创建它的 构造函数的 prototype

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值