美文网首页
js 面向对象

js 面向对象

作者: Vector_Wan | 来源:发表于2019-08-03 11:12 被阅读0次

1. 一切事物皆对象

JavaScript 是一个面向对象语言,对于他来说一切事物皆对象。

  • 布尔是对象(如果用 new 关键词定义)
  • 数字是对象(如果用 new 关键词定义)
  • 字符串是对象(如果用 new 关键词定义)
  • 日期永远都是对象
  • 算术永远都是对象
  • 正则表达式永远都是对象
  • 数组永远都是对象
  • 函数永远都是对象
  • 对象永远都是对象

原始值指的是没有属性或方法的值。

原始数据类型指的是拥有原始值的数据。

JavaScript 定义了 5 种原始数据类型:

string
number
boolean
null
undefined
原始值是一成不变的(它们是硬编码的,因此不能改变)。

2. 原型与原型链

我们知道 C++ 与 Java 等高级语言是通过类的方式来实现面向对象编程的,而 js 与他们不同,是通过一种叫做 原型 的方式来实现的。

我们先来讨论一下讨论 基于类的(class-based)面向对象和 基于原型的 (prototype-based) 面向对象这两种方式在构造客观世界的方式上的差别。

在基于类的面向对象方式中,对象(object)依靠 类(class)来产生。而在基于原型的面向对象方式中,对象(object)则是依靠 构造器(constructor)利用 原型(prototype)构造出来的

举个客观世界的例子来说明二种方式认知的差异。例如工厂造一辆车,一方面,工人必须参照一张工程图纸,设计规定这辆车应该如何制造。这里的工程图纸就好比是语言中的 类 (class),而车就是按照这个 类(class)制造出来的;

另一方面,工人和机器 ( 相当于 constructor) 利用各种零部件如发动机,轮胎,方向盘 ( 相当于 prototype 的各个属性 ) 将汽车构造出来。

类式面向对象语言比如 Java,为了弥补无法使用面向过程语言中全局函数和变量的不便,允许在类中声明静态 (static) 属性和静态方法。而实际上,客观世界不存在所谓静态概念,因为一切事物皆对象!而在原型式面向对象语言中,除内建对象 (build-in object) 外,不允许全局对象、方法或者属性的存在,也没有静态概念。所有语言元素 (primitive) 必须依赖对象存在。但由于动态语言的特点,语言元素所依赖的对象是随着运行时 (runtime) 上下文 (context) 变化而变化的(这一点与 python 很像, 比如鸭子类型),具体体现在 this 指针的变化。正是这种特点更贴近 “万物皆有所属,宇宙乃万物生存之根本”的自然观点。在下面的例子中 浏览器提供的对象 window 对象可以看成是‘宇宙’。实际上我们定义的全局变量就是在 window 对象中保存的。

var str = "我是一个 String 对象 , 我声明在这里 , 但我不是独立存在的!" 
var obj = { des: "我是一个 Object 对象 , 我声明在这里,我也不是独立存在的。" }; 
var fun = function() { console.log( "我是一个Function 对象!谁调用我,我属于谁:", this ); };
obj.fun = fun; 
console.log( this === window ); // 打印 true 
console.log( window.str === str ); // 打印 true 
console.log( window.obj === obj ); // 打印 true 
console.log( window.fun === fun ); // 打印 true 
fun(); // 打印 我是一个 Function 对象!谁调用我,我属于谁:window 
obj.fun(); // 打印 我是一个 Function 对象!谁调用我,我属于谁:obj 
fun.apply(str); // 打印我是一个 Function 对象!谁调用我,我属于谁:str 

我们可以在 consol 中查看 window :可以看到下面这个 感觉像 JSON 的写法 的输出,这里面有一个 str

Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, frames: Window, …}
QBMiniVideo:ƒ QBMiniVideo()
alert:ƒ alert()
applicationCache:ApplicationCache {status: 0, onchecking: null, onerror: null, onnoupdate: null, ondownloading: null, …}
atob:ƒ atob()
blur:ƒ ()
...
str:"我是一个 String 对象 , 我声明在这里 , 但我不是独立存在的!"
...

先写这么多回头用到的时候再补充语法。

参考文章

相关文章

  • JS面向对象精要(二)_函数

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(三)_理解对象

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(四)_构造函数和原型对象

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(五)_继承

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • js 面向对象和面向过程

    js 面向对象和面向过程

  • 面向对象OOP--JS

    作者:烨竹 JS面向对象简介 JS名言:万物皆对象 JS面向对象比PHP简单很多;因为JS中没有class关键字,...

  • JavaScript笔记(一)

    一、面向对象面向过程的区别 1、什么是js对象 js对象:属性和方法的集合,js所有数据都可以看成对象...

  • JS面向对象

    JS面向对象入门 1、面向对象语言概念面向对象语言主要包括 类、对象、封装、多肽。2、面向对象的编程思想面向过程思...

  • 2018-01-18

    js中的面向对象核心 js是基于对象的编程语言,在后面的学习中我们通过一种模式使其转化成为面向对象的语言。js面向...

  • 浅谈JS中的面向对象

    浅谈JS中的面向对象 本文主要说说本人在JS中对面向对象的理解。 计算机编程语言主要分为面向过程式编程和面向对象式...

网友评论

      本文标题:js 面向对象

      本文链接:https://www.haomeiwen.com/subject/tderdctx.html