JS学习-面向对象

原创 2013年12月05日 22:11:37

  JS 是一种基于原型(prototype)的面向对象的语言,但是没有类的概念,所有的一切都派生自现有对象的一个副本。

  基于对象和面向对象实际上都是以对象为中心,从本质上讲没有区别。JavaScript中没有,所以有人把类叫作原型对象,它们两个在编程中发挥的作用都是一个意思,这样就比较容易理解基于原型的面向对象。


对象


先从JS中的对象说起,

JavaScript中的内置对象:

  > Function对象

Function类型对象分为两类:

Function实例,例如alert(),可以使用参数来调用。

做为构造函数的function,必须通过new关键字来进行实例化。

如:

functionmyFunction(){

 

}

> Object对象,这类对象无法像function类对象那样调用,可以用它来创建简单的静态对象。

  如:var obj = newObject();或者var obj = {};

> Array对象,是一种特殊的属性和方法的集合,

  如:var array= new Array();或者var array = [];

> StringBooleanNumber分别用来表示字符串、布尔值、数字。

> 还有MathDateRegExp及其他内置对象。

 

所有的内置对象都可以通过new关键字或其简单语法形式创建。

构造函数


构造函数都不陌生,用来新建同时初始化一个新对象的函数。

什么样的函数可以用来创建同时初始化新对象呢?答案是:任何一个函数,包括空函数。

JS中,function是构造函数的起点。

function A(){

 

}

继承

既然是面向对象,那继承是必不可上的特性,在JS中,因为JS是基于原型的面向对象,没有类的概念,这就导致无法从一个类扩展出另一个类的底层类结构,在JS中继承是通过简单的从一个对象原型向另一个对象原型复制方法而实现的。

通过例子直观的说明:

<scripttype="text/javascript">

 

function init(){

  //创建person对象

  var person = {};    //等同于var person = new Object();

  //创建person的方法getName和getAge

  person.getName= function(){

    alert("personname");

  }        

  person.getAge= function(){

    alert("personage");        

  }


  //创建另一个对象student

  var student = {};

  //创建student自己的方法getStuNum

  student.getStuNum= function(){

    alert("studentstuNum");
 
  };

  //student复制person的getName方法

  student.getName= person.getName;
 
  //覆盖原方法,验证是否是简单的复制

  person.getName= function(){

     alert("person1name");        
  
  }

  //student复制person的getAge方法

  student.getAge= person.getAge;
  
  student.getName();  //打印结果:person name

  person.getName();  //打印结果:person1 name

}

window.onload= init;

</script>

通过上面的例子说明在JS中继承是通过简单的从一个对象原型向另一个对象原型复制方法而实现的。那什么是原型?

原型

当我们在创建函数时,都自动添加了prototype属性,这就是函数的原型。

function A() {

   this.width = 10;

   this.key = "this is A";

 }

 A._objectNum = 0;//定义A的属性

 A.prototype.say =function(){//给A的原型对象添加属性

 alert("hello world")

 }

  通过A.prototype.say = function(),给函数的原型对象增加一个say属性并引用一个原型函数。原型只存在与function中,实质就是一个对象被创建后引擎默认创建一个空的prototype对象,既然对象是属性包那么原型也就是一个属性包。

  可以这样理解:原型就如C#中类的概念,prototype则是用来给类添加属性、方法的。

  在js中,每个对象默认都有一个[[Prototype]]属性,其保存着的地址就构成了对象的原型链,这也是JS底层的东西。如下例:



  从图中看到,无论是对象Object2还是Object3,都有一个属性保存了对Obj的原型对象的引用,对于这些对象来说,一些公用的方法可以在函数的原型中找到,节省了内存空间。

  简单说就是通过对象的Prototype保存对另一个对象的引用,通过这个引用往上进行属性的查找,这就是原型链。

 


小结

  JS的内容还有很多,从W3Chool中就能出来,本篇博客主要从JS 对象这个方向,整体进行了总结,学任何知识都一样,首先要从整体上有一个认识,知识还需要时间和实践的积累。



头疼啊,待续

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

js学习笔记(面向对象)

一、知识点: -constructor -this -原型继承 -原型链 -应用 二、constructor 这里的构造器是指对象的构造器,也可以叫对象类型。 //new operato...

js进阶学习之--面向对象(一)

js进阶学习之--面向对象(一) 构建对象的方式一共有三种: 面向对象 //1.工厂方式构建对象 //弊端:通过工厂构建对象无法检测该示例来自于哪个对象类型 ...

JS学习5(面向对象)

在ES里把对象定义为无序属性的集合,其属性可以包含基本值,对象和函数。

js面向对象学习笔记

/***** 面向对象编程 *****/ /** 工厂模式 **/ function createPerson(name, age, job) { var o = new Obje...

js面向对象学习笔记之六(变量)

【1.值对应的boolean】 false 布尔值 false 对象 null 数字 NaN (not a number) 数字 0 初始值 ...

从 prototype.js 深入学习 javascript 的面向对象特性

从 prototype.js 深入学习 javascript 的面向对象特性 js是一门很强大的语言,灵活,方便。 目前我接触到的语言当中,从语法角度上讲,只有 Ruby 比它更爽。 不过我接触的...

js面向对象学习笔记之七(函数 与 基础控制结构)

【函数部分】  1. 函数内置参数数组对象 arguments    function sum(){ var len = arguments.length; var s = 0; ...

node.js学习之路(二)之“深入理解面向对象的JavaScript”

一、重新认识面向对象为了说明 JavaScript 是一门彻底的面向对象的语言,首先有必要从面向对象的概念着手 , 探讨一下面向对象中的几个概念: 一切事物皆对象 对象具有封装和继承特性 对象与对象之...

node.js学习之路(一)之“面向对象的JavaScript入门”

一、前言node.js以JavaScript为基础,因此学习node.js之前有必要复习一下JavaScript,其中我的学习之路是先看《JavaScript高级程序设计》,后看《JavaScript...

韩顺平 javascript教学视频_学习笔记19_js面向对象三大特征(封装,继承,多态)

js面向对象编程------三大特征 封装继承多态 面向对象的三大特征对任意的面向对象语言都是具有的,只是表现形式不一样 面向对象的三大特征都是先从抽象这个概念出来的 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)