Java程序猿的JavaScript学习笔记(5——prototype和Object内置方法)
计划按例如以下顺序完毕这篇笔记:
- Java程序猿的JavaScript学习笔记(1——理念)
- Java程序猿的JavaScript学习笔记(2——属性复制和继承)
- Java程序猿的JavaScript学习笔记(3——this/call/apply)
- Java程序猿的JavaScript学习笔记(4——this/闭包/getter/setter)
- Java程序猿的JavaScript学习笔记(5——prototype)
- Java程序猿的JavaScript学习笔记(6——面向对象模拟)
- Java程序猿的JavaScript学习笔记(7——jQuery基本机制)
- Java程序猿的JavaScript学习笔记(8——jQuery选择器)
- Java程序猿的JavaScript学习笔记(9——jQuery工具方法)
- Java程序猿的JavaScript学习笔记(10——jQuery-在“类”层面扩展)
- Java程序猿的JavaScript学习笔记(11——jQuery-在“对象”层面扩展)
- Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)
- Java程序猿的JavaScript学习笔记(13——jQuery UI)
- 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内置方法)的更多相关文章
- Java程序猿的JavaScript学习笔记(汇总文件夹)
最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ...
- Java程序猿的JavaScript学习笔记(8——jQuery选择器)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿的JavaScript学习笔记(3——this/call/apply)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿的JavaScript学习笔记(1——理念)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿的JavaScript学习笔记(9—— jQuery工具方法)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿的JavaScript学习笔记(6——面向对象模拟)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Flutter学习笔记(36)--常用内置动画
如需转载,请注明出处:Flutter学习笔记(36)--常用内置动画 Flutter给我们提供了很多而且很好用的内置动画,这些动画仅仅需要简单的几行代码就可以实现一些不错的效果,Flutter的动画分 ...
随机推荐
- Windows系统 配置Java的JDK环境变量
安装了JDK或者绿色版后,在系统的环境变量设置中,进行以下配置: 1.新建->变量名"JAVA_HOME",变量值"D:\jdk1.8.0_05"(即JD ...
- js遍历对象的属性和方法
js遍历对象的属性和方法 一.总结 二.实例 练习1:具有默认值的构造函数 实例描述: 有时候在创建对象时候,我们希望某些属性具有默认值 案例思路: 在构造函数中判断参数值是否为undefined,如 ...
- 4.Windows下安装ZooKeeper
转自:https://www.cnblogs.com/mstmdev/p/5612791.html 官方主页: https://zookeeper.apache.org/ 选择合适的镜像地址下 ...
- 记一些stl的用法(持续更新)
有些stl不常用真的会忘qwq,不如在这里记下来,以后常来看看 C++中substr函数的用法 #include<string> #include<iostream> usin ...
- 关于js盒子模型的知识梳理
盒子模型 JS盒子模型中的13个常用属性: clientWidth/clientHeight:可视区域的宽高,宽高+PADDING组成 clientTop/clientLeft:上边框和左边框的宽度 ...
- 【习题 3-11 UVA - 1588】Kickdown
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟一下就好 一位一位地往右移动. [代码] #include <bits/stdc++.h> using namesp ...
- 【Codeforces Round #431 (Div. 1) B】
[链接]h在这里写链接 [题意] 场上有 n 个点,它们分别向上与向右在不同时刻开始运动,相遇则改变移动方向,求最终这些点到达的坐标. [题解] 先把每个点的坐标都往它本该移动的方向相反的方向退ti个 ...
- 3D游戏《龙心传奇Dragona》全套完整源码
<龙心传奇Dragona>全套完整源码,<Dragona Online>也叫<龙心传奇>是一款3D中古奇幻风格网络游戏,描写叙述一个充满剑.魔法.恶魔和龙的魔法大陆 ...
- cURL(wget)—— 测试 RESTful 接口及模拟 GET/POST/PUT/DELETE/OPTIONS 请求
cURL 是一个简单的 http 命令行工具.与最优秀的 Unix 工具一样,在设计之时,cURL 是个小型程序,功能十分专一,而且是故意为之,仅用于访问 http 服务器.(在 Linux 中,可以 ...
- IOS基础:深入理解Objective-c中@class 和#import的区别
在面向对象objective-C语言中,当一个类使用到另一个类时,并且在类的头文件中需要创建被引用的指针时,可以#import方式引入,通过@class引入: 这两种的方式的区别在于: 1.运用#im ...