`
zccst
  • 浏览: 3322077 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[Object]面向对象编程(妙味课堂版)

 
阅读更多
zccst笔记
一、面向对象初步
工厂方法
function createPerson(name,sex){
  //1
  var p = new Object;
  //2
  p.name = name;
  p.sex  = sex;
  p.showName = function(){alert(this.name);}
  p.showSex = function(){alert(this.sex);}
  //3
  return p;
}
p1 = createPerson('blue','male');
p2 = createPerson('leo','female');

缺点:
1,没有new。
2,每个对象都有一套自己的函数——浪费资源  解决:使用原型
alert(p1.showName == p2.showName);//false


真正的面相对象
//例如
function createPerson(name,sex){
  this.name = name;
  this.sex  = sex;
}
createPerson.prototype.showName = function(){alert(this.name);}
createPerson.prototype.showSex = function(){alert(this.sex);}
alert(p1.showName == p2.showName);//true

//再例如:
var arr1 = new Array(1,2,3,4);
var arr2 = new Array(1,2,3,4,5);
Array.prototype.sum = function(){
  var ret = 0;
  for(var i = 0; i < this.length; i++){
    ret += this[i];
  }
  return ret;
}
alert(arr1.sum());
alert(arr2.sum());

String.prototype.trim = function(){
  return this.replace(/^/s+|/s+$/g,'');
}

需要注意的几点:

1,构造函数就是类,类就是构造函数
echo typeof Date; //function

function() show{
 alert('abc');
}
var show = function(){ //alert(typeof show);//function
 alert('abc');
}
//实际上是
var show = new Function("alert('abc')");//alert(typeof show);//function

typeof Array,Date//都是function
typeof Array(), Date()//都是object



alert(typeof Array);//function
console.log(Array); //[undefined]

alert(typeof Date); //function
console.log(Date);  //Date()

alert(typeof Array());//object
console.log(Array()); //[]

alert(typeof Date()); //string
console.log(Date());  //Mon Nov 26 2012 18:45:27 GMT+0800

alert(typeof (new Array()));//object
console.log(new Array());   //[]

alert(typeof (new Date())); //object
console.log(new Date());    //Date {Mon Nov 26 2012 18:45:28 GMT+0800}


alert(typeof Math);//function
console.log(Math); //Math {}



2,原型优先级(可类比CSS的行间样式和class)
Array.prototype.a = 12;
var arr = [1,2,3];
alert(arr.a); //12
arr.a = 5;
alert(arr.a); //5
delete arr.a;
alert(arr.a); //12



二、容易错乱的this
this关键字
在两种情况下回引起错乱:定时器和事件中。
【北风版】解释:内部函数中的this是全局window。外部函数的this是当前函数域。

var box = {  
    user : "the box",  
    getUser : function(){  
        return this.user;  
    }
};
//alert(box.getUser());



var box = {  
    user : "the box",  
    getUser : function(){
        return function(){
			alert(this);     //[object Window]
			return this.user;//undefined
		}
    }
};
//alert(box.getUser()());
//内部函数中的this是全局window。外部函数的this是当前函数域。 


//解决办法一:使用_this。
var box = {  
    user : "the box",  
    getUser : function(){
		var _this = this;
        return function(){
			alert(_this);     //[object Object]
			return _this.user;//the box
		}
    }
};
alert(box.getUser()());

//解决办法二:使用call
alert(box.getUser().call(box));




1,定时器
原因:定时器是全局变量
function Aaa(){
  this.a = 12;

  //异常原因是this此时变成全局window
  //setInterval(this.show, 1000);

  //正确的方法
  var _this = this;
  setInterval(function(){
    _this.show();
  },1000);
}
Aaa.prototype.show = function(){
  alert(this.a);
}
var obj = new Aaa();
obj.show();


2,事件中
原因:对象和dom对象混在一起
解决办法:
var _this = this;
this.xx = function(){
  _this.show();
}
实例
function Bbb(){
  this.b = 5;

  //异常原因是show方法中的this变成dom对象
  //document.getElementById('btn1').onclick=this.show;

  //正确的方法
  var _this = this;
  document.getElementById('btn1').onclick= = function(){
    _this.show();
  }
}
BB.prototype.show = function(){
  alert(this.b);
}
window.onload = function(){
  new Bbb();
}



三、继承
js继承通过call
function Person(name,sex){
	this.name = name;
	this.sex  = sex;
}
Person.prototype.showName = function(){
	alert(this.name);
}
Person.prototype.showSex = function(){
	alert(this.sex);
}

function Worker(name,sex,job){
	//继承父类,this由Person变为Worker对象。构造函数伪装:继承父类的属性
	Person.call(this,name,sex);
	this.job = job;
}

//通过原型继承父类的方法。原型链
Worker.prototype = Person.prototype;
//是引用。对Worker的修改影响了Person的方法。换成
for(var i in Person.prototype){
	Worker.prototype[i] = Person.prototype[i];
}


Worker.prototype.showJob = function(){
	alert(this.job);
}
var oM1 = new Worker('blue','男', '打杂的');
oM1.showJob();

总结:
构造函数伪装:继承父类的属性
通过原型链:继承父类方法

需要注意的几点:
1,引用
本质就是指向同一块区域。js所有对象全是引用。
var arr1 = [1,2,3];
var arr2 = arr1;
arr2.push(4);
alert(arr1);
alert(arr2);

//解决办法之一:通过for循环



2,instanceof
var arr1 = new Array();
alert(arr1 instanceof Object);   //true
alert(arr1 instanceof Array);    //true
alert(arr1 instanceof Function); //false
alert(arr1 instanceof Date);     //false

alert(typeof arr1);              //object




四、js系统对象

1,宿主对象(由浏览器提供)
主要是document和widow。

2,本地对象(非静态对象)
var arr = new Array(); //正常
常见:Object, Function, Array, String, Boolean, Number, Date, RegExp, Error

3,内置对象(静态对象)
var oMath = new Math();//报错
不需要实例化,可以直接用。比如熟悉函数。
常见:Math,Global
分享到:
评论

相关推荐

    matlab面向对象编程.pdf

    面向对象编程(OO)在软件开发中运用了识别模式和定义分类系统的标准科学与工程实践。分类系统和设计模式使工程师和科学家能够理解复杂系统,并通过重用他人的工作来提高效率。通过将分类系统和设计模式应用于编程,...

    用C-语言实现面向对象编程.pdf

    用 C 语言实现面向对象编程,我曾经在嵌入式控制系统工作过,苦于嵌入式系统编程一直是 C 语言,而没法用 C++或其他高级 语言的面向对象方法编程。经过研究生的学习和探索,偶然间发现高焕堂老师写 OOPC(面向对象 C...

    VC++习题答案_vc++面向对象编程第四版答案,visualc++6.0第四版

    1. **面向对象编程基础**:面向对象编程(OOP)是C++的核心特性,包括类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)和多态性(Polymorphism)。通过类定义数据结构和操作数据的方法,...

    面向对象编程与非面向对象编程

    面向对象编程(Object-Oriented Programming,简称OOP)与非面向对象编程是两种不同的编程范式,它们在软件开发中的应用和设计理念有着显著的区别。本文将深入探讨这两种编程范式的概念、特点及其在实际软件工程中的...

    java面向对象编程pdf

    面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将程序设计看作是对象的交互,对象之间的关系和行为。 一、对象和类 在Java中,对象是指具有某些特征和行为的实体,例如人、学生、大象、冰箱...

    第16章 LabVIEW中的面向对象编程,labview面向对象的框架,LabView

    在LabVIEW中实现面向对象编程(Object-Oriented Programming, OOP)可以提升代码的可重用性、可维护性和组织性。本章将深入探讨LabVIEW中的面向对象编程框架及其应用。 面向对象编程的核心概念包括类(Class)、...

    c++面向对象编程实例大全

    面向对象编程(Object-Oriented Programming,简称OOP)是C++的核心特性,也是现代软件开发中的主流编程范式。下面我们将详细探讨这一主题。 首先,C++的面向对象特性主要包括类(Class)、对象(Object)、封装...

    写给大家看的面向对象编程书(第3版)代码

    面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它基于“对象”的概念,将数据和操作数据的方法封装在一起。在“写给大家看的面向对象编程书(第3版)”中,作者深入浅出地介绍了这一主题,...

    Object C 面向对象编程

    面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它使用“对象”来设计软件。对象可以包含数据,以字段(通常称为属性或成员变量)的形式,以及代码,以方法(或函数)的形式。对象被用来表示现实...

    Javascript面向对象编程.

    面向对象编程(Object-Oriented Programming,OOP)是编程的一种重要范式,JavaScript也完全支持这一特性,尽管它并非一种传统的静态类型语言。这篇博客文章可能详细讨论了如何在JavaScript中实现面向对象编程。 在...

    写给大家看的面向对象编程书(高清完整第三版)

    面向对象编程(Object-Oriented Programming,简称OOP)是一种广泛应用的编程范式,它将程序设计中的实体抽象为对象,通过对象之间的交互来实现功能。《写给大家看的面向对象编程书》作为一本面向初学者和进阶者的...

    Visual C++ 面向对象编程教程——王育坚

    面向对象编程(Object-Oriented Programming, OOP)的核心思想包括封装、继承和多态。在Visual C++中,我们可以通过定义类来实现封装,隐藏数据细节并提供公共接口;通过继承,我们可以创建新的类以扩展或修改现有类...

    JAVA的面向对象编程笔记(经典)

    在面向对象编程中,对象是最基本的单位, everything is object(万物皆对象)。对象有两个方面:属性(what)和方法(how)。属性用来描述对象,而方法告诉外界对象有哪些功能。 二、为什么要使用面向对象? 使用...

    写给大家看的面向对象编程书

    面向对象编程(Object-Oriented Programming,简称OOP)是一种广泛应用的编程范式,它将程序设计中的实体抽象为对象,通过对象之间的交互来实现功能。这种编程方式使得代码更易于理解和维护,同时也增强了代码的复用...

    Java面向对象编程配套下PPT-孙卫琴.ppt

    【Java面向对象编程】 Java面向对象编程是Java语言的核心特性,它允许程序员将复杂的程序结构分解成独立的、可重用的对象。本PPT主要围绕`java.lang`包的应用展开,该包是Java编程的基础,包含了所有Java类的根类`...

    C#面向对象编程期末参考题

    【标题】"C#面向对象编程期末参考题"揭示了本次讨论的核心——C#编程语言中的面向对象编程(Object-Oriented Programming, OOP)概念,这是软件开发中的一种重要方法论。C#是一种现代、类型安全且面向对象的语言,...

    面向对象编程C++和Java比较教程 中英文完整版 pdf

    面向对象编程(Object-Oriented Programming,简称OOP)是一种重要的编程范式,它通过将数据和操作数据的方法封装在对象中,实现了程序设计的模块化和抽象化。本教程对比了两种广泛应用的面向对象语言——C++和Java...

    Delphi面向对象编程思想刘艺(PDF)

    面向对象编程(Object-Oriented Programming,OOP)是现代软件开发中的主流编程范式,它的核心思想是将数据和操作数据的方法封装在对象中,以实现代码的高复用性和模块化。在Delphi中,这种思想得到了充分的体现,其...

Global site tag (gtag.js) - Google Analytics