计划按例如以下顺序完毕这篇笔记:

  1. Java程序猿的JavaScript学习笔记(1——理念)
  2. Java程序猿的JavaScript学习笔记(2——属性复制和继承)
  3. Java程序猿的JavaScript学习笔记(3——this/call/apply)
  4. Java程序猿的JavaScript学习笔记(4——this/闭包/getter/setter)
  5. Java程序猿的JavaScript学习笔记(5——prototype)
  6. Java程序猿的JavaScript学习笔记(6——面向对象模拟)
  7. Java程序猿的JavaScript学习笔记(7——jQuery基本机制)
  8. Java程序猿的JavaScript学习笔记(8——jQuery选择器)
  9. Java程序猿的JavaScript学习笔记(9——jQuery工具方法)
  10. Java程序猿的JavaScript学习笔记(10——jQuery-在“类”层面扩展)
  11. Java程序猿的JavaScript学习笔记(11——jQuery-在“对象”层面扩展)
  12. Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)
  13. Java程序猿的JavaScript学习笔记(13——jQuery UI)
  14. Java程序猿的JavaScript学习笔记(14——扩展jQuery UI)

这是笔记的第5篇,聊聊prototype、内置的Object对象和Object对象的属性和方法。

作者博客:http://blog.csdn.net/stationxp

作者微博:http://weibo.com/liuhailong2008

转载请取得作者允许

1、prototype

上一篇我们了解了怎样实现控制对象属性的訪问权限,实现了对象属性的封装。

第1篇我们通过对函数prototype的扩展,实现了对函数创建的全部对象的扩展。也使用prototype属性实现了继承。

结合前几篇所学,我们看看怎样实现例如以下Java代码类似的功能.

public class UiObject{
private String _author = 'liuhailong';
private String _utype = 'UiObject';
private String _uname = 'UiObject'; public UiObject(String name){
this._uname = name;
} public void setUname(name){this._uname = name;} public String getAuthor(){ return this._author; }
public String getUtype(){ return this._utype; }
public String getUname(){ return this._uname; }
}

尝试编写代码例如以下:

function UiObject(uname) {
var _uname = uname || 'RootUiObject';
}
UiObject.prototype = {
_utype : "UiObject",
_author : 'liuhailong', get utype(){ return this._utype;},
get author(){ return this._author;}, get uname(){ return this._uname;},
set uname(uname){ this._uname = uname;}, render : function(){
console.log('Render Me!');
}
} var uiRoot = new UiObject();
uiRoot.uname = 'new name';
uiRoot.utype = 'new type';
uiRoot.author = 'new autho';
console.log(uiRoot.uname); // output : new name
console.log(uiRoot.utype); // output : UiObject
console.log(uiRoot.author);// output : liuhailong

代码中综合使用了prototype和闭包,从输出来看,达到效果。

这段代码将作为我以后实现类的范本,随着不断积累,我也会尽量更新这个范本,找到在JavaScript中定义类的最佳实践。

prototype为JavaScript中一等对象(Function)提供了基本类型定义的强力支持,足见其重要性。

并且通过prototype为函数功能提供了及其方便易用的扩展功能,足见其强大。

2、内置Object对象

看以下代码:

function UiObject(){}
var ui = new UiObject();
console.log(ui.toString());  // output : [object object] var o = {};
console.log(o.toString());   // output : [object object]

定义了两个“空的”对象,调用其toString方法都返回了值,不是应该返回undefined吗?

相信Java程序猿会心一笑,已经猜到发生了什么。

通过firefox调试观察,两个空对象真的是“空”的。怎么回事?

假设仅仅算自有属性,并且两个对象的确是“空”的,但他们的prototype应该是有默认赋值的。

记得我们上一篇聊到的属性的4个特性吗?当中一个特性是:是否可遍历。比方prototype属性,就不可遍历。

改用IE调试,看到了两个对象的prototype属性(灰色的,应该是由于不可遍历)和默认的prototype的内部结构。

例如以下图所看到的。

观察各个对象的类型,能够发现,UiObject、ui的prototype的prototype类型都是Object,o本身和prototype的类型就是Object

Object已经露出了真身佛面,展开可看到其内部的属性(假设有)和方法。

3、Object的属性和方法

能看到的类型都是Function,有的能够通过赋值覆盖,有的不能够。

没有看到上一篇提到过的Object.defineProperty,也没有看到Object.create(),可能是各浏览器对ECMAScript 5支持程度不同的原因,也可能是调试器由于某种原因没有列出。

大家能够自行问度娘了解Object的属性和方法,需注意:上面列出的不是全集。

Java程序猿的JavaScript学习笔记(5——prototype和Object内置方法)的更多相关文章

  1. Java程序猿的JavaScript学习笔记(汇总文件夹)

    最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ...

  2. Java程序猿的JavaScript学习笔记(8——jQuery选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  3. Java程序猿的JavaScript学习笔记(3——this/call/apply)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  4. Java程序猿的JavaScript学习笔记(1——理念)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  5. Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  6. Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  7. Java程序猿的JavaScript学习笔记(9—— jQuery工具方法)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  8. Java程序猿的JavaScript学习笔记(6——面向对象模拟)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  9. Flutter学习笔记(36)--常用内置动画

    如需转载,请注明出处:Flutter学习笔记(36)--常用内置动画 Flutter给我们提供了很多而且很好用的内置动画,这些动画仅仅需要简单的几行代码就可以实现一些不错的效果,Flutter的动画分 ...

随机推荐

  1. 【AIM Tech Round 4 (Div. 2) B】Rectangles

    [链接]http://codeforces.com/contest/844/problem/B [题意] 也是道计数水题,没什么记录意义 [题解] 枚举每个点的位置在,然后往右往下 枚举和它一样颜色的 ...

  2. 杭电1102 Constructing Roads

    Constructing Roads Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  3. HDU 2068 RPG的错排(错排公式 + 具体解释)

    RPG的错排 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  4. UVa 11015 - 05-2 Rendezvous

    題目:有一個班級的學生要一起寫作業,所以他們要到一個統一的地點.現在給你他們各自的位置, 問集合地點定在哪,能够讓全部人走的總路徑長度最小. 分析:圖論.最短路.直接利用Floyd計算最短路,找到和值 ...

  5. linux 命令之 apt-get

    apt-get 是一个下载安装软件包的简单命令行接口 使用方法: apt-get [OPTIONS] [COMMANDS] [PACKAGE_NAMES] OPTIONS: -h 帮助信息 -q 输出 ...

  6. 利用安卓手机的OTG共享有线网络

    利用安卓手机的OTG共享有线网络 安卓手机有些是支持OTG的,OTG的显著特点就是手机能给外部设备供电,而且能交换数据. 那么,没有OTG功能的手机能不能给弄个OTG出来呢?当然可以,原因很简单,既然 ...

  7. 数值溢出(arithmetic overflow)问题与解决方案

    0. 典型场景 两数相加(乘法).两数相减.一个数的阶乘,一个数的幂,这些统统可能造成数值的溢出: 避免数值溢出的方法: 当把一个计算出的很大的数赋值给一个 int(2^31-1)类型变量存储时,一般 ...

  8. HDU 2063 过山车 第一道最大二分匹配

    http://acm.hdu.edu.cn/showproblem.php?pid=2063 题目大意: m个女生和n个男生一起做过山车,每一排必须一男一女,而每个女孩愿意和一些男生坐一起,, 你要找 ...

  9. 具体解释ebs接口之客户配置文件导入(二)

    ------------------------------------ -- 1a. Setup the Org_id ------------------------------------ ex ...

  10. boost 库编译选项

    boost大部分库仅仅须要包括头文件就可以使用,而有部分须要编译的.例如以下: E:\Qt\Qt3rdlib\boost_1_58_0>bjam --show-libraries The fol ...