计划和完成在这个例子中,音符的以下序列:

    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)

这是笔记的第2篇。聊聊属性复制和继承的事情。

很基础。相同。也很重要。

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

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

转载请取得作者允许

一切皆对象

属性是相对对象来说的。所以问题来了:什么是对象?对象是类的实例。好吧,够了,这是Java程序猿的想法。

怎样从JavaScript的角度考虑这个问题呢。

首先,

为什么要有对象?

简单主要的数据类型在面对复杂的业务逻辑时,不足堪用,所以我们须要更复杂的,针对要解决的问题定制的数据结构。

所以我们须要对象(比方日期)。我们希望对象有自己的属性、能够有自己的方法。甚至还须要事件。

什么是对象?

JavaScript中,数组(Array)、日期(Date)、正則表達式(RegExp)都是对象。他们有自己的属性、方法,甚至事件。

自成一体,描写叙述一类事物,完毕特定的功能。

在Java的世界中。“一切皆对象”,在JavaScirpt中,还能够喊出相同的口号吗?Yes,we can。

JavaScript中:

  1. 简单数据类型。有其封装类型。Number,Boolean。
  2. 数组。var arr = []; 和var arr = new Array();得到的都是数组对象。
  3. 函数也是对象,比Java还彻底,真正做到一切皆对象了。
  4. 对象是对象。指的是通过例如以下语句创建的对象:var o = {}; 或 var o = new Object(); 或 var o = Object.create({})。
  5. 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对象上。

  1. function(destination, source) {
  2. <span style="white-space:pre"> </span>for (var property in source) {
  3. <span style="white-space:pre"> </span>destination[property] = source[property];
  4. <span style="white-space:pre"> </span>}
  5. <span style="white-space:pre"> </span>return destination;
  6. }

怎样继承?

什么是继承?

继承是指子元素的对象什么都没做,只靠指定和父元素的关系。就自己主动拥有了父元素的特性和能力。

怎样实现继承?

继承的要点是:指定和父对象的关系

  1. /* 定义根对象 */
  2. function UiObject() {}
  3. UiObject.prototype = {
  4. type : "UiObject",
  5. author : 'liuhailong',
  6. render : function(){
  7. console.log('Render Me!');
  8. }
  9. }
  10.  
  11. /* 定义Panel */
  12. function UiPanel( height, weight ) {
  13. this.type = "UiPanel";
  14. this.height = height;
  15. this.weight = weight;
  16. }
  17. UiPanel.prototype = new UiObject(); //指定继承关系
  18.  
  19. /* 測试 */
  20. var p = new UiPanel(100,60);
  21. console.log(p.author); // ouput : liuhailong
  22. p.render(); // output : render me

接下来,给“父类”添加一个“方法”。看看子类是否可以直接使用。

  1. /* 定义根对象 */
  2. function UiObject() {}
  3. UiObject.prototype = {
  4. type : "UiObject",
  5. author : 'liuhailong',
  6. render : function(){
  7. console.log('Render Me!');
  8. }
  9. }
  10.  
  11. /* 定义Panel */
  12. function UiPanel( height, weight ) {
  13. this.type = "UiPanel";
  14. this.height = height;
  15. this.weight = weight;
  16. }
  17. UiPanel.prototype = new UiObject(); //指定继承关系
  18.  
  19. /* 測试1
  20. var p = new UiPanel(100,60);
  21. console.log(p.author); // ouput : liuhailong
  22. p.render(); // output : render me
  23. */
  24.  
  25. /* 扩展“父类”的功能 */
  26. UiObject.prototype.init = function(){
  27. console.log("Init the Ui Control ");
  28. }
  29.  
  30. /* 測试2 */
  31. /*   測试2   */
  32.  var p1 = new UiPanel(100,60);
  33.  var p2 = new UiPanel(200,60);
  34.  p1.init(); // output : Init the Ui Control 
  35.  console.log(p1.author === p2.author); //true

通过扩展父类,能够添加子类的功能。

O该。

版权声明:本文博主原创文章,博客,未经同意不得转载。

Java程序猿JavaScript学习笔记(2——复制和继承财产)的更多相关文章

  1. Java程序猿JavaScript学习笔记(4——关闭/getter/setter)

    计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ...

  2. Java程序猿JavaScript学习笔记(14——扩大jQuery UI)

    计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ...

  3. JavaScript学习笔记(散)——继承、构造函数super

    构造函数中的super 今天看<JavaScript设计模式与开发实践>时,在书中看到一段代码出现super语句,第一次看到这个关键字,所以上网查了下它的作用,发现这个关键字是来自java ...

  4. javascript学习笔记(四) Number 数字类型

    数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数  toExponential() 方法 用科学 ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. Android Gradle配置

    解决问题 错误: Could not find the AndroidManifest.xml file, going up from path //打开app build.gradle文件加入以下代 ...

  2. ASPから広がり

    ASP是动态服务器页面(Active Server Page)外语缩写.[1]是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单.方便的编程工具.ASP的网页文 ...

  3. python学习【一】基础入门

    Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ...

  4. 14-C语言宏

    目录: 一.宏定义 二.#x,##x使用和预定义宏 三.宏的高级使用(条件编译) 回到顶部 一.宏定义 1 宏是常用的预处理功能之一,是在编译之前进行宏替换,即将宏名替换成所定义的宏体. 2 优点:可 ...

  5. OSG消锯齿

    osg::DisplaySettings::instance()->setNumMultiSamples();   在osg+mfc下成功实现抗锯齿,在程序初始化的时候,即在osg控制类中,我的 ...

  6. 强化:把treeview的QString路径转换为QModelIndex节点,有了节点就什么都好办了

    http://doc.qt.io/qt-4.8/qdirmodel.html#index-2 甚至还能直接调用setData: setData(const QModelIndex &index ...

  7. WS_CLIPCHILDREN与WS_CLIPSIBLINGS 收藏

    英文单词解释clip:夹子.子弹夹.回形针:夹住,修剪sibling:同胞兄弟或姐妹overlapped:重叠 这两个Window Stype的特性与异同素来不太清楚,今日作一笔记:MSDN的解释为: ...

  8. cocos2d-x游戏开发(十六)帧动画

    欢迎转载:http://blog.csdn.net/dawn_moon/article/details/11775745 本来想写一下帧动画的,搜了一下网上好像有一大把,就懒得写了,直接贴代码. // ...

  9. 网页在Safari快速滚动和回弹的原理: -webkit-overflow-scrolling : touch;的实现

    现在很多for Mobile的H5网页内都有快速滚动和回弹的效果,看上去和原生app的效率都有得一拼. 要实现这个效果很简单,只需要加一行css代码即可: -webkit-overflow-scrol ...

  10. 不允许在单例对象中创建Srping容器

    spring.net在使用的时候,不允许在单例对象中创建Srping容器 需要将实例化模式转为单例singleton=“false”