第一次在园子发文:

关于js面向对象的理解:

  工厂方式是什么?构造函数是什么?原形链?对象的引用?

1.对象是什么?

在js接触的比较多的就是对象了,比如: 

 var arr = [];

 arr.number = 10;    //对象下面的变量:叫做对象的属性

 //alert( arr.number );
//alert( arr.length ); arr.a= function(){ //对象下面的函数 : 叫做对象的方法
alert(123);
}; arr.a(); //

通过 new Date() new String() 可以创建一个个对象。

2.工厂方式是什么?

//工厂方式 : 封装函数

function createPerson(name){
//1.原料
var obj = new Object();
//2.加工
obj.name = name;
obj.showName = function(){
alert( this.name );
};
//3.出厂
return obj; } var p1 = createPerson('小明');
p1.showName();

通过工厂方式,不需要new 一个函数,直接在函数内部创建一个新的对象,通过给新对象加属性和方法,然后抛出。缺点是:不够灵活。

3.构造函数是什么?

  

function CreatePerson(name){

    this.name = name;
this.showName = function(){
alert( this.name );
}; } var p1 = new CreatePerson('小明');
p1.showName();

通过在函数外部new 一个函数,实例化了一个对象就是构造函数(一般函数名遵循大写)。在函数内部this就指向了这个实例化的对象,而不是指向window。属性和方法都挂载到了实例化的对象上面去了。缺点:每个方法都挂载在新创建的实例化对象上面,如果需要实例化很多对象,就造成了性能浪费。

特别注意:

p1.showName() == p2.showName();//false 因为如上,方法在每个实例化对象上面,为了解决这个问题,出现了在原型上面加方法。

4.对象的引用:

//example 1:

var a = [1,2,3];
var b = a;
b.push(4);
alert(b); //1,2,3,4; // b没有被赋值,只是把引用指向给了a,修改b就是修改a的值 //example 2: var a = [1,2,3];
var b = a;
b = [1,2,3,4];
alert(a); // 1,2,3 //虽然一开始b引用指向了a,但是后来b被赋值了,重新开创了内存单元,赋值成了[1,2,3,4],结果就没有影响a
// 对象类型:复制不仅仅是值的复制,也是引用的传递 //example 3:
var a = [1,2,3];
var b = [1,2,3];
alert(a == b); // 对象类型 必须值和引用都相同才等于

5.原型:

function CreatePerson(name){

    this.name = name;
}
//在构造函数原型上添加方法
CreatePerson.prototype.showName = function(){
alert( this.name );
}; var p1 = new CreatePerson('小明');
p1.showName();
var p2 = new CreatePerson('大白');
p2.showName(); alert(p1.showName() == p2.showName()) //true
//给数组原型添加方法:

Array.prototype.sum = function(){
var result = 0;
for(var i = 0; i<this.length; i++){
result += this[i];
}
return result;
}
arr = [1,2,3];
alert(arr.sum()); //

javascript面向对象的理解(一)的更多相关文章

  1. JavaScript面向对象的理解

    JavaScript面向对象的理解  笔记链接: http://pan.baidu.com/s/1c0hivuS 1:JavaScript 中分两种对象,函数对象和普通对象new Function() ...

  2. javascript javascript面向对象的理解及简单的示例

    javascript面向对象的理解及简单的示例 零.本节重点: 1.封装: 2.继承: 壹.下面理解: 一. javascript面向对象概念: 为了说明 JavaScript 是一门彻底的面向对象的 ...

  3. javascript面向对象个人理解

    1. javascript面向对象特性:抽象性,封装性,继承性: 2. js中的对象:键值对的集合:比如说{key:value} 3.抽象性:用一个对象描述一个数据,需要抽取这个对象的核心数据:两个必 ...

  4. JavaScript 面向对象编程 · 理解对象

    前言:      在我们深入 面向对象编程之前 ,让我们先理解一下Javascript的 对象(Object),我们可以把ECMAScript对象想象成散列表,其值无非就是一组名值对,其中值可以是数据 ...

  5. JavaScript面向对象深入理解原型

    原型模式 function Person(){ } Person.prototype.name="Ewarm"; Person.prototype.age="29&quo ...

  6. JavaScript 面向对象开发知识基础总结

    JavaScript 面向对象开发知识基础总结 最近看了两本书,书中有些内容对自己还是很新的,有些内容是之前自己理解不够深的,所以拿出来总结一下,这两本书的名字如下: JavaScript 面向对象精 ...

  7. 聚焦JavaScript面向对象的思想

    面向对象是一种软件开发方法,是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物.随着时代的发展,计算机被用于解决越来越复杂的问题.一切事物皆对象,通过面向对象的方式,将现实世界的 ...

  8. 03.JavaScript 面向对象精要--理解对象

    JavaScript 面向对象精要--理解对象 尽管JavaScript里有大量内建引用类型,很可能你还是会频繁的创建自己的对象.JavaScript中的对象是动态的. 一.定义属性 当一个属性第1次 ...

  9. 深入理解Javascript面向对象编程

    深入理解Javascript面向对象编程 阅读目录 一:理解构造函数原型(prototype)机制 二:理解原型域链的概念 三:理解原型继承机制 四:理解使用类继承(继承的更好的方案) 五:建议使用封 ...

随机推荐

  1. 理解reserve与resize

    1.首先明白capacity与size的概念,capacity表示当前可以容纳多少个元素,size表示当前有多少个元素.为了避免频繁地分配内存,vector预留了一些内存.也就是说:size<= ...

  2. Codeforces Round #340 (Div. 2) A. Elephant 水题

    A. Elephant 题目连接: http://www.codeforces.com/contest/617/problem/A Descriptionww.co An elephant decid ...

  3. 用python写makefile

    温馨提示:阅读本文的同学最好能了解makefile和python的编写规则. 不懂的同学能够先保存在收藏夹.以便日后查看. 事实上之前我一直非常懒,我不想了解makefile规则.由于在linux下开 ...

  4. [C++基础]随机数,随机种子数

    #include <stdlib.h> #include <iostream> #include <ctime> using namespace std; void ...

  5. A. Fox and Box Accumulation

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  6. 安装mysql问题

    我想大多数人都遇到第一次安装失败或者卸载安装mysql,老是在最后一步失败:解决方法有2个:1 删除 默认路径文件C:\Documents and Settings\All Users\Applica ...

  7. 实现顶部轮播,下部listview经典布局的两种方式

    开头: 在做android开发的时候,我们经常会遇到这样的布局,上面是一个图片轮播图,下面是一些列表的项目.很多新闻app,视频类app都采用这样的布局.起初的时候 由于没有很多参考,我自己想到了一种 ...

  8. qt creator中使用qwt插件

    前提:我用mingw编译的qwt. 将qwt插件集成到qt designer非常easy.仅仅要把qwt编译的qwt_designer_plugin.dll复制到C:\Qt\Qt5.3.1\5.3\m ...

  9. 使用openssl工具生成证书

    第一步. 生成rsa私钥文件 :\> openssl genrsa -out bexio.pem 1024 : 若要加密生成的rsa私钥文件(des3加密) :\> openssl gen ...

  10. 剑指 offer set 2 从头到尾打印链表

    总结 1. 书中给出的最终解法是递归或用堆栈模拟递归. 之前我一直不清楚是否还有更优雅的做法, 看样是没了