js面向对象(一)
类是对现实世界中具有相似属性和行为的一类对象的抽象,它体现了面向对象方法论中封装的概念。JavaScript语言中并没有与门定义类的关键字在JavaScript中,一个函数就是一个类,函数名即是类名,方法体的定义可以看做构造函数
function classname(){ //这里编写类成员的定义}
?私有成员的定义不其作用域相关,只要不能被外界直接访问,都可以认为是私有成员。
function Person(){//定义Person类var name = null; //带有var 的是 私有成员 在对象外无法访问 var age = null; //建议无论声明成全局还是局部的最好都加上varfunction setName(pName){//设置姓名 name = pName;}function getAge(){//取得年龄return age}}
? ?公有成员即直接对外公开的属性和方法。
?在JavaScript中,使用this关键字是创建公有成员的常用方法。
?与强类型语言中的this关键字类似,JavaScript中的this也可以代表某个类在运行时刻的实例。
?
function Person(){ //定义Person类 var name = null;var age = "20岁";this.height = 178.5; //在JavaScript中,可以使用变量保存函数的引用。如果将一个函数引用赋值给公有变量,//那么该函数就可以被外界直接调用this.setName = function(pName){ name = pName; }; this.getAge = function(){ return age; };}
? ?强类型语言中使用static关键字定义静态成员,JavaScript中并未提供类似的关键字。
?在JavaScript中,为类型直接添加属性成员,该属性成员可以通过“类型.属性”直接访问
?
Person.info = "这是一个Person类";//为Person类添加静态变量Person.getInstance = function(){//为Person类添加静态方法return new Person();}
? ?JavaScript中的对象是由函数创建的,用来创建对象的函数也称为构造函数或者类型。
?JavaScript中的内置类型Object、Array、Date、Math、RegExp、Function、Error
?Object是JavaScript中的原始对象类型,其他所有的JavaScript对象都继承自Object
?? 使用new关键字创建类型对象
?
var now = new Date();//创建了一个Date类的对象var o = new Object();//创建了一个Object类的对象var p = new Person();
? ?1. 当解释器遇到new操作符时首先创建一个新的空对象;
?2. 执行Person类型的构造函数,并将其中的this指针都指向该新对象;
?3. 如果构造函数中包含不存在的属性,解释器就创建该属性。所以函数的执行实际就是初始化新对象的过程,也就实现 了构造函数的作用;
?4. 当函数执行完毕后,new操作符将返回初始化后的对象。
?
? 引用对象的属性和方法
对象名.属性(方法)名对象名["属性(方法)名"]
?使用“.”访问对象成员
var p = new Person();alert(p.height);p.setName("Jason”);alert(p.getName());
?使用“[ ]”访问对象成员
var arr = new Array();arr["push”](1);alert(arr["length"]);
? ?动态添加、修改和删除对象的属性和方法
?JavaScript语言可以动态的修改(新增、更新或删除)对象的属性或方法
?
var user = new Object()//基于Object原型创建user对象user.name = "fox”;//为user对象动态添加name属性user.getName = function(){//为user对象动态添加getName方法return this.name;};user.name = "jason”;//动态修改name的属性值user.getName = function(){//动态修改getName方法的定义return "I’m " + this.name;};user.name = undefined;//删除user对象的name属性user.getName = undefine;//删除user对象的getName方法
?? 创建无类型对象(Object Literal)
?对象字面量(Object Literal)就是一种帮助我们构建临时对象的无类型对象
“{}”把一系列“属性名:属性定义”括起来定义一个对象,多个属性之间用逗号分隔ment1,{ property1:state property2:statement2, ..., propertyN:statementN}
?Object Literal既可以定义简单对象,也可以定义复杂对象
var obj = {};//定义一个空对象var user = {//定义了一个user对象name:"fox",age:20,sex:"femal",sayHello:function(){alert("Hello! I’m " + this.name + "!"); },favoriteColor:["red","pink"]};for(var i in user.favoriteColor){alert(user.favoriteColor[i]);}user["sayHello"]();"]();
?以上就是简单的对js面向对象的简单介绍,一下是个简单的例子
?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>面向对象</title><script language="javascript">function one(){/*第一种构造方法*/var a = new Object();a.x = 1; a.y = 2;alert();/*第二中构造方法*/var b = {x:1,y:2}; //带有var 的是 私有成员 在对象外无法访问 alert(b.x);alert(b.y);// 声明一个共有的属性this.lenght ={ valueOf:function(){} }}/*第三中构造方法*/function two(x,y){ this.x = x; //共有属性 可以通过"."的形式进行访问 this.y = y;}//对象的实例function Instatnce(){ var t = new two(1,2); alert(t.x); alert(t.y);}//对象的共有和私有function List(){ var m_elements = [];m_elements = Array.apply(m_elements,arguments);this.length = { valueOf:function(){ return m_elements.length; }, toString:function(){ return m_elements.length;}}this.toString = function(){return m_elements.toString();}this.add = function(){return m_elements.push.apply(m_elements,arguments);}} //测试共有 私有 function test(){ var list = new List(1,2,3); alert(list); alert(list.length); list.push(4,5,6); alert(list.toString()); alert(list.add()); alert(list); } </script></head><body> <input type="button" onclick="Instatnce()" value="面向对象" /> <input type="button" onclick="test()" value="共有私有" /></body></html>