`
johnson_gong
  • 浏览: 13306 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

javascript 类, 对象 深入学习

 
阅读更多

1.关键词:类,对象;

javascript 中实际上没有严格的【类和对象】的概念,只是实现了相关效果,为了方便理解暂时

使用【类和对象】;

 

2.明确 类中的 【public/private变量】的使用范围,明确 类方法、对象方法的使用范围;

 

3. 区别 三种类型的错误(方法"未定义",方法可调用但是返回值是"未定义"):

TypeError: undefined is not a function

Car.getCarName_3()},undefined

 

ReferenceError: carMadeIn is not defined

 

4.查看运行效果可下载附件代码,运行html文件在console窗口可见。

ps: Chrome, Firfox的控制台所显示的信息稍有不同。

 

构造函数:

/*
构造函数/类
*/
function Animal(pName) {

    // public, 公有变量,  可被[对象(实例)方法 -- this.xxxx()], [原型(prototype)方法]访问;
    // 也可以被对象直接访问[obj.name];
    this.name = pName || "defaultName";
    this.size = "middle";

    // private, 私有变量, only can be read by "this.xxxx()"
    var owner = "tom";

    // 对象(实例)方法, 只能被 对象(实例)调用;
    this.getName = function() {
        return "animalName";
    };

    this.getName_this_byObj = function() {
        return this.name;
    };

    this.getOwner_var_byObj = function() {
        // this.owner,
        // owner,
        return owner;
    };

    this.excuteSameNameFunc = function() {
        return "Hello, this is <this.excuteSameNameFunc>";
    };

};

// 原型(prototype)方法, 只能被 对象(实例)调用;
Animal.prototype.getColor = function() {
    return "Yellow";
};

Animal.prototype.getName_this_prototype_byObj = function() {
    return this.name;
};

Animal.prototype.getOwner_var_prototype_byObj = function() {
    return owner;
};

Animal.prototype.excuteSameNameFunc = function() {
    return "Hello, this is<prototype-excuteSameNameFunc>";
};

// 只能被 对象(实例)调用;
Animal.prototype.bodyHeight = "50cm";

// 类(class)方法, 只能被 类 调用;[又称:静态方法]
Animal.getAge = function() {
    return "3";
};

Animal.getSize_this_ByClass = function() {
    return this.size;
};

Animal.getOwner_var_ByClass = function() {
    // owner -> e:ReferenceError: owner is not defined
    // this.owner -> undefined
    return owner;
};

 

测试分支:

testOOP : function(orderNo, obj) {

        var key = "";
        var val = "";

        try {

            key = (orderNo + ":" + key);

            switch (orderNo) {

            case 1:
                utilTemp.log("--- >>> 调用方式:[类名.方法()]", [ 'font-size:25px',
                        'line-height:28px', 'color: skyblue' ].join(';'));

                key = key + "this.getName()--[Animal.getName()]:";
                val = Animal.getName();
                // utilTemp.log(key + Animal.getName());
                break;

            case 2:
                key = key + "Animal.prototype.getColor()--[Animal.getColor()]:";
                val = Animal.getColor();
                // utilTemp.log(key + Animal.getColor());
                break;

            case 3:
                key = key + "Animal.getAge()--[Animal.getAge()]:";
                val = Animal.getAge();
                // utilTemp.log("key:" + key + Animal.getAge());
                break;

            case 4:
                utilTemp.log("--- >>> 调用方式:[实例对象.方法()]", [ 'font-size:25px',
                        'line-height:28px', 'color: skyblue' ].join(';'));

                key = key + "this.getName()--[obj.getName()]:";
                val = obj.getName();
                // utilTemp.log(key + obj.getName());
                break;

            case 5:
                key = key + "Animal.prototype.getColor()--[obj.getColor()]:";
                val = obj.getColor();
                // utilTemp.log(key + obj.getColor());
                break;

            case 6:
                key = key + "Animal.getAge()--[obj.getAge()]:";
                val = obj.getAge();
                // utilTemp.log(key + obj.getAge());
                break;

            case 7:
                utilTemp.log("--- >>> 利用可调用/合法 的方法,访问属性: this/var;",
                        [ 'font-size:25px', 'line-height:28px',
                                'color: skyblue' ].join(';'));

                key = key
                        + "{this.size--Animal.getSize_this_ByClass()}---[Animal.getSize_this_ByClass()]:";
                val = Animal.getSize_this_ByClass();
                break;

            case 8:
                key = key
                        + "{var owner--Animal.getOwner_var_ByClass()}---[Animal.getOwner_var_ByClass()]:";
                val = Animal.getOwner_var_ByClass();
                break;

            case 9:
                key = key
                        + "{this.name--this.getName_this_byObj()}---[obj.getName_this_byObj()]:";
                val = obj.getName_this_byObj();
                break;

            case 10:
                key = key
                        + "{var owner--[this.getOwner_var_byObj()}---[obj.getOwner_var_byObj()]:";
                val = obj.getOwner_var_byObj();
                break;

            case 11:
                key = key
                        + "{this.name--[Animal.prototype.getName_this_prototype_byObj()}"
                        + "---[obj.getName_this_prototype_byObj()]:";
                val = obj.getName_this_prototype_byObj();
                break;

            case 12:
                key = key
                        + "{var owner--[Animal.prototype.getOwner_var_prototype_byObj()}"
                        + "---[obj.getOwner_var_prototype_byObj()]:";
                val = obj.getOwner_var_prototype_byObj();
                break;

            case 13:
                utilTemp.log("--- >>> 对象调用同名方法之 优先级( this.function() );",
                        [ 'font-size:25px', 'line-height:28px',
                                'color: skyblue' ].join(';'));

                key = key
                        + "{[Animal.prototype.excuteSameNameFunc() / this.excuteSameNameFunc()}"
                        + "---[obj.excuteSameNameFunc()]:";
                val = obj.excuteSameNameFunc();

                break;

            case 14:
                utilTemp.log("--- >>> 类/对象(实例) 直接访问属性", [ 'font-size:25px',
                        'line-height:28px', 'color: skyblue' ].join(';'));

                key = key + "{this.size}--[Animal.size]:";
                val = Animal.size;
                break;

            case 15:
                key = key + "{this.size}--[obj.size]:";
                val = obj.size;
                break;

            case 16:
                key = key + "{var owner}--[Animal.owner]:";
                val = Animal.owner;
                break;

            case 17:
                key = key + "{var owner}--[obj.owner]:";
                val = obj.owner;
                break;

            case 18:
                key = key
                        + "{Animal.prototype.bodyHeight}--[Animal.bodyHeight]:";
                val = Animal.bodyHeight;
                break;

            case 19:
                key = key + "{Animal.prototype.bodyHeight}--[obj.bodyHeight]:";
                val = obj.bodyHeight;
                break;

            case 20:
                break;

            default:
                // nothing!

            }

            utilTemp.log(key + val);

        } catch (e) {
            utilTemp.error(key + ">>>e:" + e);
        }

    },

 

测试入口:

    testMain : function() {

        var two = new Animal("Kitty");
        for ( var i = 1; i <= 20; i++) {
            utilTemp.testOOP(i, two);
        }
    },

 

测试截图:



 

 

结论:

额,一目了然。

xxx方法可以正常使用、xxx属性可以正常访问。。。

 

 

  • 大小: 53 KB
  • 大小: 83.6 KB
分享到:
评论

相关推荐

    JavaScript学习深入—面向对象编程

    - **原型链**:每个JavaScript对象都有一个原型对象,这个原型对象也有一个原型,以此类推,形成一个链状结构。当试图访问一个对象的属性时,JavaScript引擎会沿着这个原型链查找,直到找到该属性为止。 ```...

    Javascript面向对象编程.

    JavaScript是一种广泛应用于Web开发的脚本语言,尤其在前端领域占据着核心地位。面向对象编程(Object-Oriented Programming,OOP)是...学习这些材料将有助于深入理解JavaScript的面向对象编程,提升你的编程技能。

    面向对象JavaScript精要(英文原版pdf)

    通过本书的学习,读者可以深入了解面向对象编程的原理,并掌握如何在JavaScript中有效地运用这些原理来编写高质量的代码。此外,书中还包含了大量的示例代码和实践案例,帮助读者更好地理解和掌握所学知识。 #### ...

    深入理解JavaScript系列

    第3部分深入探索JavaScript,介绍了语法、值、运算符、布尔类型、数字、字符串、语句、异常捕获、函数、变量、对象与继承、数组、正则表达式、Date、Math、JSON、标准全局变量、编码和JavaScript、ECMAScript 5的新...

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

    JavaScript是一种广泛...通过深入学习这本《JavaScript面向对象编程指南(第2版)》,开发者不仅能掌握JavaScript的面向对象编程基础,还能了解到实际项目中如何有效地运用这些知识,提升编程技巧和解决问题的能力。

    JavaScript面向对象基础.ppt

    JavaScript是一种广泛应用于Web开发的脚本语言,尤其在创建交互性网页方面发挥着重要作用。在JavaScript中,面向对象编程(OOP)是其核心概念之一,...理解这些概念对于深入学习JavaScript和开发高效Web应用至关重要。

    JavaScript深入学习文档集锦

    这个"JavaScript深入学习文档集锦"包含了多个文档,涵盖了JavaScript的基础到高级概念,旨在帮助学习者全面理解并掌握这门语言。 1. JavaScript-1.doc:可能涵盖了JavaScript的基础知识,包括变量、数据类型(如...

    javascript对象参考手册

    JavaScript对象是编程语言的核心组成部分,尤其在Web开发中扮演着至关重要的角色。"JavaScript对象参考手册"涵盖了这一...通过深入学习,你将能够更好地理解和应用JavaScript对象,从而提升你的编程技能和项目质量。

    javascript面向对象学习笔记

    JavaScript是一种基于原型和函数式...理解这些概念对于深入学习JavaScript和开发复杂的JavaScript应用至关重要。在实际编程中,应根据需求选择合适的方法创建对象和实现继承,以优化性能并保持代码的可读性和维护性。

    javascript面向对象编程.pdf

    现代JavaScript编程语言的发展经历了渐进和稳固的过程。过去十年,它从一门被看作简单的玩物式语言...通过不断实践和学习,开发者可以更深入地掌握JavaScript面向对象编程的精髓,以此来创造更加丰富和高效的Web应用。

    JavaScript面向对象精要(英文版)

    ### JavaScript面向对象精要 #### 一、概述 ...通过学习本书,开发者能够更好地理解JavaScript的底层工作原理,掌握高效的编码技巧,并能灵活运用面向对象的设计原则来构建可维护性强的应用程序。

    JavaScript面向对象编程案例

    JavaScript是一种广泛应用于Web开发的脚本语言,尤其在构建交互式网页和动态应用程序时不可或...通过阅读和实践这些案例,你可以逐步掌握如何创建、继承和操作JavaScript对象,从而成为一名更出色的JavaScript开发者。

    javascript中数组、对象

    在JavaScript开发中,源码是程序的基础,理解源码有助于深入学习其工作原理。例如,对于数组和对象的方法,了解它们的实现可以帮助我们优化代码性能。同时,许多工具如`lodash`和`underscore.js`提供了丰富的实用...

    第15章 javascript面向对象与原型

    在深入讲解JavaScript面向对象与原型的知识点之前,首先需要了解JavaScript的基础知识。在JavaScript中,面向对象编程(OOP)的概念虽然存在,但是它的实现与传统基于类的语言有所不同。ECMAScript,也就是...

    javascript面向对象框架

    MooTools提供了许多实用的工具和功能,比如Element、Fx、Events、Class等模块,这些模块使得开发人员能够轻松地处理DOM、动画效果、事件以及创建复杂的JavaScript对象。 1. **MooTools的Class系统**:MooTools的...

    javascript 经典面向对象设计

    - **类与对象**:JavaScript没有内置的类的概念,但在ES6中引入了`class`关键字来模拟类的行为。对象则是由类实例化出来的具体实体。 - **封装**:封装是指将数据和操作这些数据的方法绑定在一起,隐藏内部状态,只...

    javascript面向对象教程

    本文将深入探讨JavaScript的面向对象特性,帮助读者理解这个语言鲜为人知的一面。 首先,我们要明白JavaScript中的对象和类型系统。JavaScript并非传统的面向对象语言,它不支持类(class)的概念,而是采用基于...

Global site tag (gtag.js) - Google Analytics