JavaScript中的面向对象是个老生常谈的话题,但是依然有很多小伙伴处于懵逼状态。面试时候最担心的就是被问到面向对象相关的内容,自己看过无数的资料,依然对面向对象百思不得其解。到底什么是原型?什么是构造函数?什么是继承。。。一提到这些概念那真是欲哭无泪、悲愤交加,甚至恨的直咬牙!所以有必要谈一次面向对象。
对象在生活中指的是女朋友或者男朋友,而在JavaScript里说的通俗一点就是一个放了很多属性与方法的集合,有很多的属性与方法是一个对象最显著的特点(可以粗暴的认为,但凡有属性与方法的就是个对象)。JavaScript里除了运算符、语句、表达式(这些都是基本语法,任何一门语言都得有基本的语法)以外,其它的都是对象或者说是某个对象身上的一部分,所以说js里一切皆对象是有讲究的。换句话说,我们在写js的时候,其实都是用一些基本语法去操作对象
1、全局对象
它是JavaScript预定义的对象,作为JavaScript的全局函数和全局属性的占位符,它是顶层对象,由宿主环境决定类型1.1、网页里为window this===window; //true
1.2、node里为Global 它身上的属性或方法可以直接使用,不用指定所属对象。它有构造函数但无法实例化
window.constructor===Window; //truewindow instanceof Window; //truenew Window(); //报错
2、内置对象
ECMAScript自己定义的对象,每个对象都有一个自己对应的构造函数
Object.prototype.constructor===Object; //trueArray.prototype.constructor===Array; //trueFunction.prototype.constructor==Function; //true
每个内置对象都是全局对象的一个属性(内置对象都是全局对象的儿子)
window.Object===Object;
//truewindow.Array===Array;
//truewindow.Function==Function; //true
内置对象分类 Object、Number、String、Boolean、Array、Math、Date、JSON、RegExp、Function...
内置对象之间也有继承关系,所有内置对象中Object是绝对的大哥,其它对象都 会继承它原型里的属性与方法
Number.prototype.proto===Object.prototype; //trueString.prototype.proto===Object.prototype; //trueBoolean.prototype.proto===Object.prototype; //trueArray.prototype.proto===Object.prototype; //trueFunction.prototype.proto===Object.prototype;//true
构造函数依然是个函数,用来生成对象。所有的对象都是由构造函数创建的,实力就是对象 由构造函数生成 平时用的实际的东西都是实例(获取的DOM元素、声明的数组、声明的函数、声明的对象),有时候需要new关键字生成(不是绝对的)
面向对象还包含很多东西,比如继承,原型等等,就不细说了,需要更深入了解的可以上网去查。
原文地址:http://blog.51cto.com/14071672/2326659