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属性可以正常访问。。。
相关推荐
- **原型链**:每个JavaScript对象都有一个原型对象,这个原型对象也有一个原型,以此类推,形成一个链状结构。当试图访问一个对象的属性时,JavaScript引擎会沿着这个原型链查找,直到找到该属性为止。 ```...
JavaScript是一种广泛应用于Web开发的脚本语言,尤其在前端领域占据着核心地位。面向对象编程(Object-Oriented Programming,OOP)是...学习这些材料将有助于深入理解JavaScript的面向对象编程,提升你的编程技能。
通过本书的学习,读者可以深入了解面向对象编程的原理,并掌握如何在JavaScript中有效地运用这些原理来编写高质量的代码。此外,书中还包含了大量的示例代码和实践案例,帮助读者更好地理解和掌握所学知识。 #### ...
第3部分深入探索JavaScript,介绍了语法、值、运算符、布尔类型、数字、字符串、语句、异常捕获、函数、变量、对象与继承、数组、正则表达式、Date、Math、JSON、标准全局变量、编码和JavaScript、ECMAScript 5的新...
JavaScript是一种广泛...通过深入学习这本《JavaScript面向对象编程指南(第2版)》,开发者不仅能掌握JavaScript的面向对象编程基础,还能了解到实际项目中如何有效地运用这些知识,提升编程技巧和解决问题的能力。
JavaScript是一种广泛应用于Web开发的脚本语言,尤其在创建交互性网页方面发挥着重要作用。在JavaScript中,面向对象编程(OOP)是其核心概念之一,...理解这些概念对于深入学习JavaScript和开发高效Web应用至关重要。
这个"JavaScript深入学习文档集锦"包含了多个文档,涵盖了JavaScript的基础到高级概念,旨在帮助学习者全面理解并掌握这门语言。 1. JavaScript-1.doc:可能涵盖了JavaScript的基础知识,包括变量、数据类型(如...
JavaScript对象是编程语言的核心组成部分,尤其在Web开发中扮演着至关重要的角色。"JavaScript对象参考手册"涵盖了这一...通过深入学习,你将能够更好地理解和应用JavaScript对象,从而提升你的编程技能和项目质量。
JavaScript是一种基于原型和函数式...理解这些概念对于深入学习JavaScript和开发复杂的JavaScript应用至关重要。在实际编程中,应根据需求选择合适的方法创建对象和实现继承,以优化性能并保持代码的可读性和维护性。
现代JavaScript编程语言的发展经历了渐进和稳固的过程。过去十年,它从一门被看作简单的玩物式语言...通过不断实践和学习,开发者可以更深入地掌握JavaScript面向对象编程的精髓,以此来创造更加丰富和高效的Web应用。
### JavaScript面向对象精要 #### 一、概述 ...通过学习本书,开发者能够更好地理解JavaScript的底层工作原理,掌握高效的编码技巧,并能灵活运用面向对象的设计原则来构建可维护性强的应用程序。
JavaScript是一种广泛应用于Web开发的脚本语言,尤其在构建交互式网页和动态应用程序时不可或...通过阅读和实践这些案例,你可以逐步掌握如何创建、继承和操作JavaScript对象,从而成为一名更出色的JavaScript开发者。
在JavaScript开发中,源码是程序的基础,理解源码有助于深入学习其工作原理。例如,对于数组和对象的方法,了解它们的实现可以帮助我们优化代码性能。同时,许多工具如`lodash`和`underscore.js`提供了丰富的实用...
在深入讲解JavaScript面向对象与原型的知识点之前,首先需要了解JavaScript的基础知识。在JavaScript中,面向对象编程(OOP)的概念虽然存在,但是它的实现与传统基于类的语言有所不同。ECMAScript,也就是...
MooTools提供了许多实用的工具和功能,比如Element、Fx、Events、Class等模块,这些模块使得开发人员能够轻松地处理DOM、动画效果、事件以及创建复杂的JavaScript对象。 1. **MooTools的Class系统**:MooTools的...
- **类与对象**:JavaScript没有内置的类的概念,但在ES6中引入了`class`关键字来模拟类的行为。对象则是由类实例化出来的具体实体。 - **封装**:封装是指将数据和操作这些数据的方法绑定在一起,隐藏内部状态,只...
本文将深入探讨JavaScript的面向对象特性,帮助读者理解这个语言鲜为人知的一面。 首先,我们要明白JavaScript中的对象和类型系统。JavaScript并非传统的面向对象语言,它不支持类(class)的概念,而是采用基于...