本文节选自JavaScript面对对象基础技术..
http://www.iteye.com/wiki/Object_Oriented_JavaScript
JavaScript下创建对象的三种方式
1:使用Json格式 var bb={name:"xx",....};这种方式方便与数据的传输情况下对象的创建,便于JavaScript里面函数动态调用,如果要再这个
对象里面创建一个新的属性,可以直接使用变量名bb.新属性名="....";来创建一个新的对象属性.
2:使用var bb=new Object();方式创建对象,使用的方式类似第一种方法,同样也可以用于新增属性,
3:基于函数的创建对象,使用起来象java中的javabean一样,先定义个函数
function bb() 然后使用 var cc=new bb()去创建一个对应的对象.
遍历对象所拥有的属性的方式
var name = {"name1":"NAME1","name2":"NAME2","name3":"NAME3","name4":"NAME4"};
var namestring = "";
for(var props in name) { //循环name对象中的属性名字
namestring += name[props];
}
判断对象是否拥有指定的属性,使用alert("key" in name)的方式,第一次看到in关键字
基于函数function的方式去创建一个对象,更准确的说是定义一个对象的类型.
function f(x)...
var f=function(x){....} 分别是基于函数表达式和函数运算符的方式去创建一个对象的类型.
创建一个对象的时候可以创建对象的构造函数,可以要求传入一些参数作为构造函数需要的初始化值
不过那不是必须的,如果没有传入,那么对应的值就为undefined 可以便捷的使用(!key)来判断值是否为undefined
函数中也有对应的arguments属性,用于便捷的访问函数里面的参数,可以使用数组的方式进行访问arguments[0],
再创建对象的时候可以直接使用Josn格式去定义个函数.后面可以使用变量名.函数名进行快捷的调用
var obj = {f0:function(){alert("f0");}}; //对象包含一个方法
function f1() {alert("f1");}
obj.f1 = f1; //为对象添加方法
obj.f0();
每一个函数都有一个prototype属性,如果对对象的prototype进行了属性的附加,那么将会影响到所谓未对该属性进行修改的该对象的实例
JavaScript中所有的函数,也就是function都有一个call和apply方法,用于模拟对象调用方法,它的第一个参数是对象(Object),后面的
参数表示对象调用这个方法时的参数,用例子看的比较清楚
f.call(o, 1, 2);
作用就相当于
o.m = f;
o.m(1,2);
delete o.m;
相当于用o增加了一个为f函数的方法,然后调用后面的1 2参数,其中的f为function名
apply不用的地方在于传递参数的方式是以数组的格式Person.apply(o,["name",89]);//Person为函数名,o是new Object 其他为参数
可以方便的使用对象.xx=function(){...}的方式给对象增加一个函数方法
function Circle(radius) {
this.radius = radius;
}
Circle.prototype.area = function() {
return 3.14 * this.radius * this.radius;
}
var c = new Circle(1);
alert(c.area());
可以方便的抽取出公共的方法,然后使用prototype属性添加倒对象的function对象之上,用于节约空间.
其中可以使用this属性访问function对象中的属性.
JavaScript中的继承.
function Circle(radius) { //定义父类Circle
this.radius = radius;
}
Circle.prototype.area = function() { //定义父类的方法area计算面积
return this.radius * this.radius * 3.14;
}
function PositionCircle(x,y,radius) { //定义类PositionCircle
this.x = x; //属性横坐标
this.y = y; //属性纵坐标
Circle.call(this,radius); //调用父类的方法,相当于调用this.Circle(radius),设置PositionCircle类的
//radius属性
}
PositionCircle.prototype = new Circle(); //设置PositionCircle的父类为Circle类
var pc = new PositionCircle(1,2,1);
alert(pc.area()); //3.14
//PositionCircle类的area方法继承自Circle类,而Circle类的
//area方法又继承自它的prototype属性对应的prototype对象
alert(pc.radius); //1 PositionCircle类的radius属性继承自Circle类
/*
注意:在前面我们设置PositionCircle类的prototype属性指向了一个Circle对象,
因此pc的prototype属性继承了Circle对象的prototype属性,而Circle对象的constructor属
性(即Circle对象对应的prototype对象的constructor属性)是指向Circle的,所以此处弹出
的是Circ.
*/
alert(pc.constructor); //Circle
/*为此,我们在设计好了类的继承关系后,还要设置子类的constructor属性,否则它会指向父类
的constructor属性
*/
PositionCircle.prototype.constructor = PositionCircle
alert(pc.constructor); //PositionCircle
JavaScript中的作用域和闭包等.
var sco = "global";
function print1() {
alert(sco); //global
}
function print2() {
var sco = "local";
alert(sco); //local
}
function print3() {
alert(sco); //undefined
var sco = "local";
alert(sco); local
}
只要再函数内重新定义一个全局变量同名的变量,那样就是在函数域内部清除对全局变量的引用,不过内部对其他函数的调用不会影响.
不过使用同名的方式,不会是一个好的编程习惯
JavaScript的闭包.就是使用一种定义变量的格式,将变量的域保留在函数内,避免被修改,同时起到了全局变量的作用。
function temp() {
var i = 0;
function b() {
return ++i;
}
return b;
}
var getNext = temp();
alert(getNext()); //1
alert(getNext()); //2
alert(getNext()); //3
alert(getNext()); //4
例子中所用的方法是将操作封装起来,可是依旧可以保留住状态,关键在于return 了一个函数。
同样更为复杂的例子,使用函数内部的函数保存变量的特别引用
function Person(name, age) {
this.getName = function() { return name; };
this.setName = function(newName) { name = newName; };
this.getAge = function() { return age; };
this.setAge = function(newAge) { age = newAge; };
}
var p1 = new Person("sdcyst",3);
alert(p1.getName()); //sdcyst
alert(p1.name); //undefined 因为Person('类')没有name属性
p1.name = "mypara" //显示的给p1添加name属性
alert(p1.getName()); //sdcyst 但是并不会改变getName方法的返回值
alert(p1.name); //mypara 显示出p1对象的name属性
p1.setName("sss"); //改变私有的"name"属性
alert(p1.getName()); //sss
alert(p1.name); //仍旧为mypara
分享到:
相关推荐
JavaScript面向对象编程指南.pdf
在这个“JavaScript面向对象基础”的资料中,我们将会探讨JavaScript中的类、对象、封装、继承以及多态等关键概念。 1. **对象与对象字面量** 在JavaScript中,对象是由键值对组成的无序集合,可以使用对象字面量...
面向对象编程的基础包括类、对象、继承和多态等概念。类是对象的模板或蓝图,定义了一组属性(数据成员)和方法(函数)。对象则是类的实例,具备类所定义的属性和行为。JavaScript虽然没有传统的类定义,但可以通过...
JavaScript面向对象编程.pdf
普通对象,另一种被称为方法对象,这和其它的面向对象语言有所不同,在文章中用实例代码对此进行了说明和探析,并且,把自 己在实际项目中使用的几种JavaScript对象编程方法在文章中进行了举例说明。
本文将深入浅出地讲解JavaScript中的面向对象技术基础,包括对象、数组、函数、类、构造函数以及原型等方面的知识。 首先,让我们来看看对象和数组。在JavaScript中,对象是键值对的集合,这些键通常是字符串,对应...
JavaScript面向对象编程.docx
1. 基础对象创建和属性操作:理解如何创建对象,包括字面量语法和构造函数,以及访问和修改对象的属性。 2. 构造函数与原型链:详细解释构造函数的工作原理,以及如何利用原型实现继承。 3. `new` 关键字的作用:...
- **现代JavaScript与面向对象编程**:现代JavaScript程序设计中融入了许多新的概念和技术,这些技术让JavaScript应用程序与以往相比有了显著的不同。面向对象编程是现代JavaScript的一个重要组成部分。 #### 二、...
在提供的压缩包文件中,"面向对象的_Javascript.doc"很可能是对这个主题的详细教程文档,可能包含了深入的理论解释和实例分析。"下载说明.txt"则可能是指导用户如何获取和解压文件的说明,而"A5下载- 更全的站长资源...
### JavaScript面向对象进阶知识点详解 #### 8.1 面向对象编程的基本特性 在探讨面向对象的JavaScript之前,我们首先需要了解面向对象编程(Object-Oriented Programming, OOP)的基本特性:封装性、抽象性、继承...
什么是对象 简单点说,编程语言中的对象是对现实中事物的简化。例如,我们一个人就是一个对象,但是编程...在后面的JavaScript对象笔记中,记录了菜鸟在学习JavaScript对象的大多数资源,希望这些资源对你也有价值。
这篇复习将深入探讨JavaScript的面向对象技术。 在JavaScript中,面向对象主要基于原型(prototype)和构造函数(constructor)实现。构造函数是一种特殊的函数,用于创建和初始化新对象。当我们使用`new`关键字...
本文将详细介绍JavaScript中的面向对象编程概念和技术,包括类定义、对象创建、继承、封装等内容。 #### 二、类定义和对象创建 ##### 2.1 类定义 在JavaScript中,“类”这一概念并不像在Java或C#这样的强类型...
JavaScript是一种基于对象(object-based)的语言,它以一种非常灵活的方式实现了面向对象(object-oriented)编程的概念。与传统的面向对象语言(如Java、C++等)不同,JavaScript没有提供传统的类和继承机制,而是通过...
04 第四章 JavaScript对象及初识面向对象.md