`
ah_fu
  • 浏览: 227888 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

JavaScript的类型和对象

阅读更多
   JavaScript是基于对象的,任何元素都可以看成对象。然而,类型和对象是不同的。本文中,我们除了讨论类型和对象的一些特点之外,更重要的是研究如何写出好的并且利于重用的类型。毕竟,JavaScript这种流行的脚本语言如果能够进行良好的封装,并形成一个庞大的类型库,对于重用是非常有意义的。
网上对于prototype的文章很多,一直没明白核心的思想。最后写了很多例子代码后才明白:prototype只能用在类型上。
以下是一些关于类型和对象的例子,大家看完例子后可能更容易理解类型和对象之间的联系:
 
 
例子代码
说明
1
Object.prototype.Property = 1;
Object.prototype.Method = function ()
{
    alert(1);
}
 
var obj = new Object();
alert(obj.Property);
obj.Method();
可以在类型上使用proptotype来为类型添加行为。这些行为只能在类型的实例上体现。

JS中允许的类型有Array, Boolean, Date, Enumerator, Error, Function, Number, Object, RegExp, String
2
var obj = new Object();
obj.prototype.Property = 1; //Error
//Error
obj.prototype.Method = function()
{
    alert(1);
}
在实例上不能使用prototype,否则发生编译错误
3
Object.Property = 1;
Object.Method = function()
{
    alert(1);
}
 
alert(Object.Property);
Object.Method();
可以为类型定义“静态”的属性和方法,直接在类型上调用即可
4
Object.Property = 1;
Object.Method = function()
{
    alert(1);
}
var obj = new Object();
alert(obj.Property); //Error
obj.Method(); //Error
实例不能调用类型的静态属性或方法,否则发生对象未定义的错误。
5
function Aclass()
{
this.Property = 1;
this.Method = function()
{
    alert(1);
}
}
var obj = new Aclass();
alert(obj.Property);
obj.Method();
这个例子演示了通常的在JavaScript中定义一个类型的方法
6
function Aclass()
{
this.Property = 1;
this.Method = function()
{
    alert(1);
}
}
Aclass.prototype.Property2 = 2;
Aclass.prototype.Method2 = function
{
    alert(2);
}
var obj = new Aclass();
alert(obj.Property2);
obj.Method2();
可以在外部使用prototype为自定义的类型添加属性和方法。
7
function Aclass()
{
this.Property = 1;
this.Method = function()
{
    alert(1);
}
}
Aclass.prototype.Property = 2;
Aclass.prototype.Method = function
{
    alert(2);
}
var obj = new Aclass();
alert(obj.Property);
obj.Method();
在外部不能通过prototype改变自定义类型的属性或方法。
该例子可以看到:调用的属性和方法仍是最初定义的结果。
8
function Aclass()
{
this.Property = 1;
this.Method = function()
{
    alert(1);
}
}
var obj = new Aclass();
obj.Property = 2;
obj.Method = function()
{
    alert(2);
}
alert(obj.Property);
obj.Method();
可以在对象上改变属性。(这个是肯定的)
也可以在对象上改变方法。(和普遍的面向对象的概念不同)
9
function Aclass()
{
this.Property = 1;
this.Method = function()
{
    alert(1);
}
}
var obj = new Aclass();
obj.Property2 = 2;
obj.Method2 = function()
{
    alert(2);
}
alert(obj.Property2);
obj.Method2();
可以在对象上增加属性或方法
10
function AClass()
{
       this.Property = 1;
       this.Method = function()
       {
              alert(1);
       }
}
 
function AClass2()
{
       this.Property2 = 2;
       this.Method2 = function()
       {
              alert(2);
       }
}
AClass2.prototype = new AClass();
 
var obj = new AClass2();
alert(obj.Property);
obj.Method();
alert(obj.Property2);
obj.Method2();
这个例子说明了一个类型如何从另一个类型继承。
11
function AClass()
{
       this.Property = 1;
       this.Method = function()
       {
              alert(1);
       }
}
 
function AClass2()
{
       this.Property2 = 2;
       this.Method2 = function()
       {
              alert(2);
       }
}
AClass2.prototype = new AClass();
AClass2.prototype.Property = 3;
AClass2.prototype.Method = function()
{
       alert(4);
}
var obj = new AClass2();
alert(obj.Property);
obj.Method();
这个例子说明了子类如何重写父类的属性或方法。
 
   以上例子中,关于通过类型实现重用方面,重要的有:
·例子1:JavaScript中允许添加行为的类型
·例子2:prototype使用的限制
·例子3:如何定义类型上的静态成员
·例子7:prototype在重定义类型的成员上的限制
·例子10:如何让一个类型继承于另一个类型
·例子11:如何在子类中重新定义父类的成员
  
结合我的上一篇文章《JavaScript如何实现面向对象的各种特征》,可见JavaScript能够实现的面向对象的特征有:
·公有属性(public field)
·公有方法(public Method)
·私有属性(private field)
·私有方法(private field)
·方法重载(method overload)
·构造函数(constructor)
·事件(event)
·单一继承(single inherit)
·子类重写父类的属性或方法(override)
·静态属性或方法(static member)
 
   OK!下次会专门总结一篇如何编写面向对象的JavaScript代码的文章给大家。请大家提出广泛的意见。
分享到:
评论

相关推荐

    浅析JavaScript中的类型和对象

    在探讨JavaScript编程时,类型和对象是两个基本且核心的概念。...随着对JavaScript对象和类型的深入理解,开发者将能够编写出更高效、更结构化的代码,同时利用JavaScript动态的特性和灵活性来解决实际问题。

    Javascript面向对象编程.

    面向对象编程(Object-Oriented Programming,OOP)是编程的一种重要范式,JavaScript也完全支持这一特性,尽管它并非一种传统的静态类型语言。这篇博客文章可能详细讨论了如何在JavaScript中实现面向对象编程。 在...

    JavaScript面向对象的支持

    JavaScript是一种广泛应用于Web开发的脚本语言,它虽然支持面向对象编程...同时,随着语言的不断发展,诸如类的引入和模块系统的标准化,JavaScript的面向对象编程正变得越来越成熟,为开发者提供了更多的工具和选择。

    JavaScript对象模型

    内置构造器是JavaScript中用于创建特定类型对象的特殊函数。例如,`Number`构造器可以用于创建数字对象。可以通过如下方式访问这些构造器: ```javascript var number = new Number(123); var numConstructor1 = ...

    JavaScript面向对象编程指南.pdf

    函数、闭包、对象和原型等概念,以代码重用为目的的继承模式;BOM、DOM、浏览器事件、AJAX和JSON;如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript...

    JavaScript面向对象编程指南

    函数、闭包、对象和原型等概念,以代码重用为目的的继承模式;BOM、DOM、浏览器事件、AJAX和JSON;如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript...

    javascript面向对象编程

    函数、闭包、对象和原型等概念,以代码重用为目的的继承模式;BOM、DOM、浏览器事件、AJAX和JSON;如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript...

    面向对象JavaScript开发

    在JavaScript中,面向对象主要通过构造函数、原型链、原型对象和闭包等机制来实现。 1. **构造函数**:构造函数在JavaScript中扮演着类的角色,它们通常用来初始化新创建的对象。我们可以通过`new`关键字调用构造...

    deePool高效的JavaScript对象池

    JavaScript是一种动态类型的编程语言,广泛应用于Web开发,其在处理大量临时对象时,可能会因为频繁创建和销毁对象而导致性能下降。为了解决这个问题,开发者们引入了“对象池”概念, DeePool 就是一个实现这一概念...

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

    本指南的第二版深入探讨了JavaScript的面向对象特性,旨在帮助开发者更好地理解和应用这一编程范式。 JavaScript的面向对象主要基于三个核心概念:封装、继承和多态。封装是将数据和操作这些数据的方法结合在一起,...

    JavaScript语法和对象速查手册-源代码

    JavaScript的基础语法包括变量声明(var、let、const)、数据类型(原始类型如字符串、数字、布尔值,以及引用类型如对象和数组)、操作符(算术、比较、逻辑等)、流程控制(条件语句如if...else,循环语句如for、...

    javascript面向对象

    3. **ES6类语法**:现代JavaScript提供了更接近传统面向对象语言的类语法,使得定义类和创建对象更加直观。例如: ```javascript class Person { constructor(name, age) { this.name = name; this.age = age; ...

    Javascript函数与对象

    在JavaScript中,几乎一切都可以被视为对象,包括函数、数组、甚至原生类型如字符串和数字在特定情况下也可以表现为对象。对象是一组无序的属性集合,每个属性都有一个键值对形式。键是字符串(或者符号),而值可以...

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

    ### JavaScript学习深入—面向对象编程 #### 一、JavaScript中的类型概述 ...综上所述,JavaScript通过其灵活的类型系统和原型继承机制支持面向对象编程,这为开发者提供了强大的工具来构建复杂的应用程序。

    面向对象javascript

    面向对象的JavaScript开发可以极大地提高开发效率和代码健壮性。 面向对象的JavaScript的特征包括: * 继承:允许子类继承父类的属性和方法,从而实现代码重用和简化开发。 * 多态:允许对象在运行时改变其形态,...

    第15章 javascript面向对象与原型

    ECMAScript,也就是JavaScript的语言规范,支持两种开发模式:函数式(过程化)和面向对象(OOP)。面向对象编程语言的一个核心概念是类,通过类可以创建具有相同属性和方法的对象。然而,ECMAScript中并没有引入类...

    JavaScript面向对象编程案例

    在JavaScript中,面向对象编程并不是原生支持的,但它可以通过模拟类和对象来实现。 JavaScript的面向对象主要基于以下三个核心概念: 1. **对象**:对象是JavaScript中的基本单位,它们由属性(key-value对)和...

Global site tag (gtag.js) - Google Analytics