Java程序猿JavaScript学习笔记(2——复制和继承财产)
计划和完成在这个例子中,音符的以下序列:
- 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)
这是笔记的第2篇。聊聊属性复制和继承的事情。
很基础。相同。也很重要。
作者博客:http://blog.csdn.net/stationxp
作者微博:http://weibo.com/liuhailong2008
转载请取得作者允许
一切皆对象
属性是相对对象来说的。所以问题来了:什么是对象?对象是类的实例。好吧,够了,这是Java程序猿的想法。
怎样从JavaScript的角度考虑这个问题呢。
首先,
为什么要有对象?
简单主要的数据类型在面对复杂的业务逻辑时,不足堪用,所以我们须要更复杂的,针对要解决的问题定制的数据结构。
所以我们须要对象(比方日期)。我们希望对象有自己的属性、能够有自己的方法。甚至还须要事件。
什么是对象?
JavaScript中,数组(Array)、日期(Date)、正則表達式(RegExp)都是对象。他们有自己的属性、方法,甚至事件。
自成一体,描写叙述一类事物,完毕特定的功能。
在Java的世界中。“一切皆对象”,在JavaScirpt中,还能够喊出相同的口号吗?Yes,we can。
JavaScript中:
- 简单数据类型。有其封装类型。Number,Boolean。
- 数组。var arr = []; 和var arr = new Array();得到的都是数组对象。
- 函数也是对象,比Java还彻底,真正做到一切皆对象了。
- 对象是对象。指的是通过例如以下语句创建的对象:var o = {}; 或 var o = new Object(); 或 var o = Object.create({})。
- JavaScript的主要战场(window)和用武之地(dom)也都是对象。
怎样得到对象?
通过下面语句能够获得对象。
var str = "我是一个 String 对象。"
var obj = { intro: "我是一个 Object 对象。" };
var fun = function() {
console.log( "我是一个 Function 对象。");
};
上面展示类两种获得自己定义对象的方式,这是最简单的方式,还有其它方式。
简单提一下prototype属性的作用。每一个函数对象都会有一个prototype属性。指向创建函数的“原型”。
以下的代码:
function UiObject() { }
UiObject.prototype = {
type : "RootUiObject" //UiObject原型的属性
}
var u1 = new UiObject(); //创建两个UiObject的实例
var u2 = new UiObject();
console.log(u1.type); //输出:RootUiObject,原型的属性能够在各实例之间分享
console.log(u1.type === u2.type); // 输出:true,引用的是同一个
正由于prototype的这个威力,我们很多其它地採用上面的代码,创建函数、设定函数原型、创建函数实例。
步骤例如以下所看到的:
function MyFunc(){}
MyFunc.prototype = {}
var myObj = new MyFunc();
接下来。看对象的属性和属性的复制。包含作为属性的方法的复制。
属性的复制
第1篇中。我们聊到了“众生平等”,属性不仅仅是单纯地指对象的数值类型的属性。
我们能够通过 o['name'] = 'liuhailong'; 语句设置对象o的name属性为某个字符串值。
也能够通过 o['write'] = function(){ return 'I am writing study notes on JavaScript'; }语句设置对象o的write属性为某个函数。
两者之间没有差别。
所以提到“属性继承和复制”时,“属性”的概念是广义的。指的是对象全部的属性和方法(“全部的”这个说法不太准确。以后我们会知道,属性也有自己的特性,有的不能被遍历。有的仅仅读,有的不能扩展。这些复杂的情况以后再考虑)。
通过例如以下方法,能够实现将source的属性所有拷贝到destionation对象上。
function(destination, source) {
<span style="white-space:pre"> </span>for (var property in source) {
<span style="white-space:pre"> </span>destination[property] = source[property];
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return destination;
}
怎样继承?
什么是继承?
继承是指子元素的对象什么都没做,只靠指定和父元素的关系。就自己主动拥有了父元素的特性和能力。
怎样实现继承?
继承的要点是:指定和父对象的关系。
/* 定义根对象 */
function UiObject() {}
UiObject.prototype = {
type : "UiObject",
author : 'liuhailong',
render : function(){
console.log('Render Me!');
}
} /* 定义Panel */
function UiPanel( height, weight ) {
this.type = "UiPanel";
this.height = height;
this.weight = weight;
}
UiPanel.prototype = new UiObject(); //指定继承关系 /* 測试 */
var p = new UiPanel(100,60);
console.log(p.author); // ouput : liuhailong
p.render(); // output : render me
接下来,给“父类”添加一个“方法”。看看子类是否可以直接使用。
/* 定义根对象 */
function UiObject() {}
UiObject.prototype = {
type : "UiObject",
author : 'liuhailong',
render : function(){
console.log('Render Me!');
}
} /* 定义Panel */
function UiPanel( height, weight ) {
this.type = "UiPanel";
this.height = height;
this.weight = weight;
}
UiPanel.prototype = new UiObject(); //指定继承关系 /* 測试1
var p = new UiPanel(100,60);
console.log(p.author); // ouput : liuhailong
p.render(); // output : render me
*/ /* 扩展“父类”的功能 */
UiObject.prototype.init = function(){
console.log("Init the Ui Control ");
} /* 測试2 */
/* 測试2 */
var p1 = new UiPanel(100,60);
var p2 = new UiPanel(200,60);
p1.init(); // output : Init the Ui Control
console.log(p1.author === p2.author); //true
通过扩展父类,能够添加子类的功能。
O该。
版权声明:本文博主原创文章,博客,未经同意不得转载。
Java程序猿JavaScript学习笔记(2——复制和继承财产)的更多相关文章
- Java程序猿JavaScript学习笔记(4——关闭/getter/setter)
计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ...
- Java程序猿JavaScript学习笔记(14——扩大jQuery UI)
计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ...
- JavaScript学习笔记(散)——继承、构造函数super
构造函数中的super 今天看<JavaScript设计模式与开发实践>时,在书中看到一段代码出现super语句,第一次看到这个关键字,所以上网查了下它的作用,发现这个关键字是来自java ...
- javascript学习笔记(四) Number 数字类型
数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数 toExponential() 方法 用科学 ...
- 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并发,经典死锁案例-哲学家就餐
转自:http://blog.csdn.net/tayanxunhua/article/details/38691005 死锁经典案例:哲学家就餐. 这个案例会导致死锁. 通过修改<Java编程 ...
- C++可变参数的另一种实现
大家熟知的C库函数printf函数就是一个可变参数函数,它是怎么实现的呢?不过他实现是有条件的,必须函数参数的入栈顺序为从右向左的顺序,也即函数的形参,在函数调用之前,必须是最右边的参数先入栈,并且参 ...
- Qt保证只有一个实例(将CreateMutex得到的handle通过转换得到值)
使用CreateMutex 可以实现只启动一个应用程序实例 view plaincopy to clipboardprint?#include <QApplication>#include ...
- Mybatis上路_05-使用命令行自动生成【转】
http://my.oschina.net/vigiles/blog/125127 Mybatis上路_05-使用命令行自动生成 1人收藏此文章, 我要收藏 发表于1个月前(2013-04-24 ...
- android 点击下弹动画实现
下弹动画的实现 下弹动画在很多应用都有使用,比如豌豆荚中的应用介绍界面,百度手机助手的应用介绍界面等. 只要熟悉android动画的使用接口,制作动画并不困难. 这里使用开源库nineoldandro ...
- java载入XML文件并解析xml
import java.io.File; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentExce ...
- offsetParent 到底是哪一个?
前言 温故而知新.遇到offsetParent这个知识点,发现书上讲的不够详细.于是看了看豪情的博客,发现讲得很具体,收藏一下. 正文 不同情况 没有已定位的父节点,且自身position:relat ...
- U3d 手游优化概述
移动平台瓶颈 体积小 芯片要求改 功耗小 影响计算系能 带宽小 传输方面受限 性能优化 资源方面 美术方面 自带地形(地形是非常占用资源的) a.控制地形的分辨率 b.地形高度图尺寸小于257 c.地 ...
- Node.js、Ionic、Cordova、AngualrJS安装
1.安装node.js: 从node.js官网下载node.js安装包,node.js下载地址:https://nodejs.org/en/download/,选择对应系统的安装下载后进行安装.(注: ...
- webservice实例
前言:朋友们开始以下教程前,请先看第五大点的注意事项,以避免不必要的重复操作. 本文引自:http://www.iteye.com/topic/1135747 一.准备工作(以下为本实例使用工具) 1 ...