`

JavaScript学习笔记_函数对象之间继承

阅读更多

因工作需要需要学习JavaScript 参考书主要为《JavaScript语言精粹》以及《JavaScript权威指南》现来总结学习经验。

关于对象继承的一个问题.

父类Fruit

//水果對象 有這幾個屬性name,color,weight,shape
//提供了對應的set 和 get方法,只對子類提供方法,不提供相應的屬性接口,
function Fruit(){
        //console.log(this);
 this.color = this.color||'';
 this.name = this.name||"fruit";
 this.weight =  this.weight||0 + '千克';
        this.shape = this.shape||'';
 this.set_name = function(name){
  this.name=name;
 };
 this.get_name = function(){
 
  return this.name;
 };
 this.set_color = function(color){
  this.color=color;
 };
 this.get_color = function (){
 
  return this.color;
 };
 this.set_shape = function(shape){
  this.shape = shape;
 };
 this.get_shape = function(){
  return this.shape;
 };
 this.get_weight = function(){
  return this.weight;
 };
 this.set_weight = function(weight){
  this.weight=weight;
 
 };

      this.message = function(){
            return "名稱為: " + this.get_name()+";\n"+"顏色為: "+this.get_color()+";\n"+"重量為: "+this.get_weight()+";\n"+"形狀為: "+this.get_shape()+";\n"
        };
}

 //javaScript中实现继承有多种方法,冒充对象,call(),apply()方法 以及通过原型链 prototype

子类 apple

有三种方法进行继承

function Apple(){
 //方法一  1 apply()方法
 //     Fruit.apply(this,new Array());
//方法一  2 apply()
      Fruit.apply(this,arguments);   
//方法二 call() 方法
 //     Fruit.call(this);   

//方法三 对象冒充

//  this.newApple= Fruit;

//  this.newApple();

//  delete this.newApple;
    this.tree = '蘋果是長在蘋果樹上';
    this.name1 = this.name;
    this.detail = function(){
        return this.message()+this.tree;
    };
    //當我把detail當做一個屬性,把父类方法的返回值赋给detail是,結果是不合理的,
    this.detail2 = this.message()+ this.tree;
    this.get_detail2 = function(){
        return this.detail2+"\n";
    };
}

赋值

var apple=new Apple();
apple.set_name('apple');
apple.set_weight(0.5);
apple.set_shape('圓形');
apple.set_color('red');

 

console.log("這是調用Fruit的message()方法 \n"+apple.message());
/*
結果為
這是調用Fruit的 message()方法
名稱為: apple;
顏色為: red;
重量為: 0.5;
形狀為: 圓形;
*/
console.log("這是調用apple的detail()方法 \n"+apple.detail());
/*
這是調用apple的 detail()方法
名稱為: apple;
顏色為: red;
重量為: 0.5;
形狀為: 圓形;
蘋果是長在蘋果樹上
*/

console.log("這是調用apple的detail1的屬性 \n"+apple.detail2);
/*這是調用apple的 detail1的屬性
*  名稱為: fruit;
*顏色為: ;
*重量為: 0千克;
*形狀為: ;
*蘋果是長在蘋果樹上
*/
console.log("這是調用apple的get_detail1()的方法 \n"+apple.get_detail2());

 

思路方法是:

     个人觉得是实例化的时候detail2 属性是为空,所以当直接调用detail2 属性时,结果apply的各项属性也是为空.解决方法是通过子类新建一个方法对其detail2的值进行更新

this.detail2 = "";
this.get_detail2 = function(){
        this.detail2 = this.message()+ this.tree;
        return this.detail2;
    };

 

//扩充 通过原型链prototype实现继承

function ClassA(){

    ClassA.prototype.name = 'jack';          
}
ClassA.prototype.set_name = function(name){
        this.name = name;
};
ClassA.prototype.get_name = function(){
          return this.name;
};
function ClassB(){
          ClassB.prototype = new ClassA();
          console.log(ClassB.prototype.get_name());
}
ClassB();

 

 

 

分享到:
评论

相关推荐

    javascript学习笔记.docx

    f) 继承:只是在查询一个属性时自动发生,而不会在写属性时发生,就是说单写一个父类的属性时,JavaScript环境会为对象本身创建一个同名的属性,从此该属性就覆盖了父类中的属性。 12) 创建一个数组可用 new Array()...

    Javascript学习笔记之函数篇(四):arguments 对象

    每一个 Javascript 函数都能在自己作用域内访问一个特殊的变量 – arguments。这个变量含有一个传递给函数的所有参数的列表。 arguments 对象不是一个数组。尽管在语法上它跟数组有相同的地方,例如它拥有 length ...

    JavaScript-学习笔记.docx

    自己学习笔记。视频:腾讯课堂:渡一教育 内容大纲: 预编译: 函数 闭包问题 对象 原型、原型链、call、apply 继承模式 对象克隆 数组 类数组 数组去重 自定义type方法(类似于typeof) try-catch es5.0严格模式 ...

    《javascript设计模式》学习笔记二:Javascript面向对象程序设计继承用法分析

    本文实例讲述了Javascript面向对象程序设计继承用法。分享给大家供大家参考,具体如下: 1.关于继承: 百度百科对继承的解释是:继承是...所谓的构造函数继承,就是通过创建一个新对象,调用父类构造函数实现的一种继承

    Javascript 读书笔记索引贴

    基础篇 Javascript学习笔记1 数据类型 Javascript学习笔记2 函数 Javascript学习笔记3 作用域 Javascript学习笔记4 Eval函数 Javascript学习笔记5 类和对象 Javascript学习笔记6 prototype的提出 Javascript学习...

    JavaScript函数、闭包、原型、面向对象学习笔记

    给大家分享了一篇关于JavaScript函数、闭包、原型、面向对象的知识点学习笔记内容,有兴趣的朋友参考下。

    JavaScript高级资料JavaScript代码 素材 笔记 作业资料.zip

    JavaScript高级资料JavaScript代码 素材 笔记 作业资料,学习资料 01-创建类和对象.html 02-类中添加方法(1).html 03-类的继承(1).html 04-super关键字调用父类普通函数(1).html 05-子类继承父类方法同时扩展自己...

    ExtJS4中文教程2 开发笔记 chm

    Javascript 面向对象之非构造函数的继承 JavaScript对象与继承教程之内置对象(下) JavaScript对象及继承教程(上) javascript正则表达式(一) javascript正则表达式(二) JavaScript的10种跨域共享方法 JavaScript...

    JavaScript继承学习笔记【新手必看】

    JavaScript作为一个面向对象语言(JS是基于对象的),可以实现继承是必不可少的,但是由于本身并没有类的概念,所以不会像真正的面向对象编程语言通过类实现继承,但可以通过其他方法实现继承。实现继承的方法很多,...

    Ruffy javascript 学习笔记

    2,javascript中,为了实现继承,必须将子类构造函数的prototype设置为一个父类的对象实例. 3,css的方块套方块模型: 最外是margin 是用来设置一个元素所占的空间的边缘到相邻元素的距离 边框:border 用来设定一个...

    Javascript学习笔记9 prototype封装继承

    好,那就让我们一步步打造,首先让我们来看下继承原本的写法: 代码如下: [removed] var Person = function(name, age) { this.name = name; this.age = age; } Person.prototype.SayHello = function () { alert&#...

    作为前端,你需要懂得javascript实现继承的方法

    现在我们可以利用ES6的extends方法实现继承,如果想了解更多有关ES6实现的继承请查看《ES6学习笔记(二):教你玩转类的继承和类的对象》,在这里不再做更多的介绍。 文章目录1. call()2. 借用构造函数继承父类型...

    JavaScript高级整理

    谷粒学院学习笔记,内容包括 原型与原型链、执行上下文、执行上下文栈、变量提升、函数提升、作用域、作用域链、闭包、对象的多种创建模式、对象的继承模式、JavaScript事件循环机制等。

    Extjs学习笔记之八 继承和事件基础

    整个Extjs框架都是以一种面向对象的方式开发的,所以理解Javascript中的继承也很重要。我前面的一篇文章 补点基础:Javascript中的类和闭包 也是为这篇做准备。另外,博客园内还有一个写的很好的系列 JavaScript继承...

    javascript原型链学习记录之继承实现方式分析

    本文实例讲述了javascript原型链学习记录之继承实现方式。分享给大家供大家参考,具体如下: 在慕课网学习继承的笔记: 继承的几种方式: ① 使用构造函数实现继承 function Parent(){ this.name = 'parent'; } ...

    javascript-learning-road:js学习笔记

    类笔记 类继承 利用super()来调用父类的构造函数。 1.super()必须在子类此之前调用。 2.类里共有的属性和方法一定要加这个。 3.constructer里面的这个指向实例对象,方法里的this指向这个方法的调用者。 新执行...

    JavaScript 继承详解及示例代码

    有些知识当时实在看不懂的话,可以先暂且放下,留在以后再看也许就能看懂了...链接: [学习笔记] 小角度看JS原型链 从原文中小摘几句 构造函数通过 prototype 属性访问原型对象 实例对象通过 [[prototype]] 内部属性

    javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)

    关于javascript中类的继承可以参考阮一峰的Blog《Javascript继承机制的设计思想》,说的很透。 一、在javascript中实例化遇到的问题: 下面用《javascript高级程序设计》中的例子来做说明,假如现在定义了一个car的...

    30s-code:30scode学习笔记

    30s代码学习笔记 大批 orderWith:根据所提供的顺序排列,返回按属性排序的已排序的对象数组 组合:组合两个对象的模型,使用指定的键来匹配对象 hasDuplicates:检查平面副本中是否有重复的值 pullBy:根据给定的...

Global site tag (gtag.js) - Google Analytics