理解JS面向对象

js中面向对象和纯面向对象语言中的对象是不同的, js中的对象是: 无序属性的集合, 其属性可以包含基本值 ,对象或者函数.

js可以像java一样写代码, 能够面向对象编程. 在js中 每一个function其实就是个对象. 可以基于Object对象创建, 还可以基于对象字面量方式

一 基于函数创建对象


1. 定义对象

function Load(){
   console.log(‘我是一个方法也是一个对象 我叫: Load‘);
}
console.log(‘---产生一个对象---‘);
var obj = new Load();

上面的程序 在浏览器运行之后在控制台会显示出来结果是:

—产生一个对象—

我是一个方法也是一个对象 我叫: Load

2. 给对象添加实例方法和属性

使用 prototype原型关键字添加的是公共的,可以理解是pubic类型的

格式:有点像json的感觉, 注: 参数列表 直接 写变量名 如 aa 不要加var 如var aa 这样就错了.

对象名称.prototype = {
    属性名 : 属性值,
    方法名 : function(参数列表) {
        方法体;
    }
}
Load.prototype = {
    sex:‘女‘,
    address:‘河南新乡‘,
    fun1:function(){
        console.log(‘这个fun1是Load对象的公共方法‘);
    }
};
console.log(‘---输出类的公共的方法和属性---‘);
obj.fun1();
console.log(‘obj 中 sex 是: ‘ + obj.sex + ‘; obj 中 address 是: ‘+ obj.address);

结果是:

—输出类的公共的方法和属性—

这个fun1是Load对象的公共方法

obj 中 sex 是: 女; obj 中 address 是: 河南新乡

3. 给对象添加静态方法和属性

直接使用类名定义, 必须用类名调用 使用对象调用会报错

//添加静态属性和方法
Load.staticName = ‘load name is wangming staic‘;
Load.static1 = function(){
      console.log(‘this is load method static‘)
};
console.log(‘---输出Load类的静态方法和静态属性, 和java相似,必须用类名调用---‘);
console.log(Load.staticName);
Load.static1();

结果:

—输出Load类的静态方法和静态属性, 和java相似,必须用类名调用—

object.html:43 load name is wangming staic

object.html:35 this is load method static

4. 对象添加私有属性和方法

直接在对象定义的属性和方法就是私有的.

function Load(){
    console.log(‘我是一个方法也是一个对象 我叫: Load‘);

    //添加私有的属性和方法
    var privateProto = ‘我是一个Load中的私有的属性‘;
    this.publicFun1 = function(){  //对外提供共有的方法,可用于输出对象中的私有属性值
        console.log(‘对象Load的私有属性privateProto 是: ‘ + privateProto);
    };
    function privateFun2(){
        console.log(‘我是Load中的第二个私有的方法 我叫 privateFun2‘);
    }
    privateFun2();  //私有属性
}

console.log(‘---输出类的私有的方法和属性---‘);
obj.publicFun1();
//obj.privateFun2();    //不能调用私有的方法  js会提示错误
console.log(obj.privateProto);  //不能调用私有的成员属性 所以是为: undefined

结果是:

—输出类的私有的方法和属性—

对象Load的私有属性privateProto 是: 我是一个Load中的私有的属性

undefined

全部的代码为

<html>
<head>
    <meta charset="utf-8" />
</head>
<body>
<script type="text/javascript">
    //Load方法也可以是对象
    function Load(){
        console.log(‘我是一个方法也是一个对象 我叫: Load‘);

        //添加私有的属性和方法
        var privateProto = ‘我是一个Load中的私有的属性‘;
        this.publicFun1 = function(){  //对外提供共有的方法,可用于输出对象中的私有属性值
            console.log(‘对象Load的私有属性privateProto 是: ‘ + privateProto);
        };
        function privateFun2(){
            console.log(‘我是Load中的第二个私有的方法 我叫 privateFun2‘);
        }
        privateFun2();  //私有属性
    }

    //给对象添加实例方法和属性 使用 prototype原型关键字
    Load.prototype = {
        sex:‘女‘,
        address:‘河南新乡‘,
        fun1:function(){
            console.log(‘这个fun1是Load对象的公共方法‘);
        }
    };

    //添加静态属性和方法
    Load.staticName = ‘load name is wangming staic‘;
    Load.static1 = function(){
          console.log(‘this is load method static‘)
    };

    //测试方法
    function test(){
        console.log(‘---产生一个对象---‘);
        var obj = new Load();
        console.log(‘---输出Load类的静态方法和静态属性, 和java相似,必须用类名调用---‘);
        console.log(Load.staticName);
        Load.static1();
        console.log(‘---输出类的公共的方法和属性---‘);
        obj.fun1();
        console.log(‘obj 中 sex 是: ‘ + obj.sex + ‘; obj 中 address 是: ‘+ obj.address);
        console.log(‘---输出类的私有的方法和属性---‘);
        obj.publicFun1();
//        obj.privateFun2();    //不能调用私有的方法  js会提示错误
        console.log(obj.privateProto);  //不能调用私有的成员属性 所以是为: undefined
    }
    window.onload = test();
</script>
</body>
</html>

注: 打开浏览器的控制台, 按F12键

二 基于Object对象


var person = new Object();
person.name = ‘My Name‘;
person.age = 18;
person.getName = function(){
    return this.name;
};
console.log(person.getName()); //My Name
console.log(person.age);    //18
console.log(person.name);   //My Name

三 基于对象字面量方式(比较清楚的查找对象包含的属性及方法)


var person = {
    name : ‘My name‘,
    age : 18,
    getName : function(){
        return this.name;
    }
}

以上三种方式 都可以使用 ‘.’ 操作符来动态的添加属性, 可以使用delete操作符将属性设置为 undefined 来删除属性

person.newAtt= ‘new Attr‘;//添加属性
console.log(person.newAtt);//new Attr
delete person.age;
console.log(person.age);//undefined(删除属性后值为undefined);

参考 http://www.cnblogs.com/gaojun/archive/2013/10/24/3386552.html

参考 http://www.cnblogs.com/keke/archive/2010/08/17/1801363.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-09 23:22:09

理解JS面向对象的相关文章

全面理解js面向对象

前言 当今 JavaScript 大行其道,各种应用对其依赖日深.web 程序员已逐渐习惯使用各种优秀的 JavaScript 框架快速开发 Web 应用,从而忽略了对原生 JavaScript 的学习和深入理解.所以,经常出现的情况是,很多做了多年 JS 开发的程序员对闭包.函数式编程.原型总是说不清道不明,即使使用了框架,其代码组织也非常糟糕.这都是对原生 JavaScript 语言特性理解不够的表现.要掌握好 JavaScript,首先一点是必须摒弃一些其他高级语言如 Java.C# 等类

新手如何理解JS面向对象开发?

今天有时间讲讲我对面向对象的理解跟看法,尽量用通俗的语言来表达,多多指教! 如今前端开发已经越来越火了,对于前端开发的要求也是越来越高了,在面试中,经常有面试官会问:你对JS面向对象熟悉吗? 其实,也就是相当于在问你,在工作中有没有用过面向对象开发?说到这里,有人就问了,什么事面向对象? 面向对象: 用我个人最简单的理解表达就是,Object的操作.另外一种理解: 给你一个条件,你去找个对象帮我处理这个事情,你就不要自己动手了. 说白了,我们就是在操作对象,那么我们就需要去创建这个对象,创建对象

简单粗暴地理解js原型链--js面向对象编程

简单粗暴地理解js原型链--js面向对象编程 原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧,想点与代码无关的事,比如人.妖以及人妖. 1)人是人他妈生的,妖是妖他妈生的.人和妖都是对象实例,而人他妈和妖他妈就是原型.原型也是对象,叫原型对象. 2)人他妈和人他爸啪啪啪能生出一堆人宝宝.妖他妈和妖他爸啪啪啪能生出一堆妖宝宝,啪啪啪就是构造函数,俗

js面向对象深入理解

js面向对象深入理解 ECMAScript 有两种开发模式:1.函数式(过程化),2.面向对象(OOP).面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,ECMAScript 没有类的概念,因此它的对象也与基于类的语言中的对象有所不同. 一.创建对象 创建一个对象,然后给这个对象新建属性和方法. var box = new Object(); //创建一个Object 对象 box.name = 'Lee'; //创建一个name 属性并赋值 b

js面向对象的系列

在面向对象语言中如java,C#如何定义一个对象,通常是定义一个类,然后在类中定义属性,然后通过new 关键字来实例化这个类,我们知道面向对象有三个特点,继承.多态和封装.那么问题来了,在javaScript中如何定义一个类?在javaScript中如何定义类的属性?如何继承?带着这些问题开始我们的js面向对象之旅吧. 在js中如何定义类? js中是没有类的概念的,但是我们通常会用一个函数定义成一个类.funtion class1(){ //类的成员定义 } 这里class1既是一个函数也是一个

js面向对象

前言 当今 JavaScript 大行其道,各种应用对其依赖日深.web 程序员已逐渐习惯使用各种优秀的 JavaScript 框架快速开发 Web 应用,从而忽略了对原生 JavaScript 的学习和深入理解.所以,经常出现的情况是,很多做了多年 JS 开发的程序员对闭包.函数式编程.原型总是说不清道不明,即使使用了框架,其代码组织也非常糟糕.这都是对原生 JavaScript 语言特性理解不够的表现.要掌握好 JavaScript,首先一点是必须摒弃一些其他高级语言如 Java.C# 等类

拖拽系列二、利用JS面向对象OOP思想实现拖拽封装

接着上一篇拖拽系列一.JavaScript实现简单的拖拽效果这一篇博客将接着对上一节实现代码利用JS面向对象(OOP)思维对上一节代码进行封装; 使其模块化.避免全局函数污染.方便后期维护和调用:写到这里突然想起一句话“没有任何一个题目是彻底完成的.总还会有很多事情可做......” 我想这句话程序开发大概也适用吧,前端开发人员总是可以结合自己之前学到“拖拽”相关知识,不断扩展.完善.无穷无尽.......     利用匿名函数自执行实现封装 ;(function(){ //do somethi

js 面向对象的基本概念和基本使用方法

js 面向对象的基本概念和基本使用方法 -> js 是不是一个面向对象的语言? 不是:与传统面向对象的理论语言有矛盾.C#,Java. 是:js里面到处都是对象,数组,时间,正则- 和 DOM.也可以像传统面向对象的语言那样用 new 的方式创建对象 -> js是一个基于对象的多范式编程语言. 面向过程的方式 面向对象的方式 函数式 递归与链式 例: Jquery 链式编程 面向对象的概念 对象的定义:无序属性的集合,其属性可以包含基本值,对象或是函数 1. 面向:将脸朝向- -> 关注

浅谈JS面向对象之创建对象

hello,everybody,今天要探讨的问题是JS面向对象,其实面向对象呢呢,一般是在大型项目上会采用,不过了解它对我们理解JS语言是很大的意义. 首先什么是面向对象编程(oop),就是用对象的思想去写代码,那什么是对象呢,其实我们一直在用,像数组 Array  时间 Date 都是对象,并且这些对象是系统创建的,所以叫系统对象,而我们自己当然也可以创建对象,一般对象有两部分组成: 1 方法 (动态的 对象下面的函数)比如Array 的push(),sort()方法 2  属性 (静态的,相