`
friendsys
  • 浏览: 347749 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

JavaSctipt面向对象技术基础....节选笔记

阅读更多
本文节选自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面向对象编程指南.pdf

    Javascript面向对象基础.rar

    在这个“JavaScript面向对象基础”的资料中,我们将会探讨JavaScript中的类、对象、封装、继承以及多态等关键概念。 1. **对象与对象字面量** 在JavaScript中,对象是由键值对组成的无序集合,可以使用对象字面量...

    JavaScript面向对象基础.ppt

    面向对象编程的基础包括类、对象、继承和多态等概念。类是对象的模板或蓝图,定义了一组属性(数据成员)和方法(函数)。对象则是类的实例,具备类所定义的属性和行为。JavaScript虽然没有传统的类定义,但可以通过...

    JavaScript面向对象编程.pdf

    JavaScript面向对象编程.pdf

    JAVASCRIPT面向对象编程探析.PDF

    普通对象,另一种被称为方法对象,这和其它的面向对象语言有所不同,在文章中用实例代码对此进行了说明和探析,并且,把自 己在实际项目中使用的几种JavaScript对象编程方法在文章中进行了举例说明。

    [推荐]javascript 面向对象技术基础教程

    本文将深入浅出地讲解JavaScript中的面向对象技术基础,包括对象、数组、函数、类、构造函数以及原型等方面的知识。 首先,让我们来看看对象和数组。在JavaScript中,对象是键值对的集合,这些键通常是字符串,对应...

    JavaScript面向对象编程.docx

    JavaScript面向对象编程.docx

    JavaScript面向对象编程指南(第2版).rar

    1. 基础对象创建和属性操作:理解如何创建对象,包括字面量语法和构造函数,以及访问和修改对象的属性。 2. 构造函数与原型链:详细解释构造函数的工作原理,以及如何利用原型实现继承。 3. `new` 关键字的作用:...

    javascript面向对象编程(中文).pdf

    - **现代JavaScript与面向对象编程**:现代JavaScript程序设计中融入了许多新的概念和技术,这些技术让JavaScript应用程序与以往相比有了显著的不同。面向对象编程是现代JavaScript的一个重要组成部分。 #### 二、...

    面向对象的Javascript.rar

    在提供的压缩包文件中,"面向对象的_Javascript.doc"很可能是对这个主题的详细教程文档,可能包含了深入的理论解释和实例分析。"下载说明.txt"则可能是指导用户如何获取和解压文件的说明,而"A5下载- 更全的站长资源...

    Javascript 面向对象的JavaScript进阶

    ### JavaScript面向对象进阶知识点详解 #### 8.1 面向对象编程的基本特性 在探讨面向对象的JavaScript之前,我们首先需要了解面向对象编程(Object-Oriented Programming, OOP)的基本特性:封装性、抽象性、继承...

    JavaScript对象笔记.rar

    什么是对象 简单点说,编程语言中的对象是对现实中事物的简化。例如,我们一个人就是一个对象,但是编程...在后面的JavaScript对象笔记中,记录了菜鸟在学习JavaScript对象的大多数资源,希望这些资源对你也有价值。

    复习JavaScript面向对象技术

    这篇复习将深入探讨JavaScript的面向对象技术。 在JavaScript中,面向对象主要基于原型(prototype)和构造函数(constructor)实现。构造函数是一种特殊的函数,用于创建和初始化新对象。当我们使用`new`关键字...

    Javascript面向对象编程

    本文将详细介绍JavaScript中的面向对象编程概念和技术,包括类定义、对象创建、继承、封装等内容。 #### 二、类定义和对象创建 ##### 2.1 类定义 在JavaScript中,“类”这一概念并不像在Java或C#这样的强类型...

    Javascript基于对象基础.pdf

    JavaScript是一种基于对象(object-based)的语言,它以一种非常灵活的方式实现了面向对象(object-oriented)编程的概念。与传统的面向对象语言(如Java、C++等)不同,JavaScript没有提供传统的类和继承机制,而是通过...

    04 第四章 JavaScript对象及初识面向对象.md

    04 第四章 JavaScript对象及初识面向对象.md

Global site tag (gtag.js) - Google Analytics