一、面向对象的三大特征

  建议回复: 
  封装:屏蔽内部细节、调用外部接口实现对应功能(函数调用)
  继承:子类继承父类中的属性和方法
  多态(js中不存在多态的概念)

二、继承

  建议回复:  
  继承:子类继承父类中的属性和方法 , 这些属性和方法在子类中不需要实现过程
  继承的种类:
       单继承:一个子类只拥有一个父类
       多继承:一个子类可以拥有多个父类

三、继承的方式及实现过程

  建议回复:
  1.继承方式一、通过改变构造函数(父类)的执行环境 ---在子类中添加一个特殊属性,这个属性值指向父类。

<script>
function Father(){
this.money="1个亿";
this.eat=function(){
console.log("eat meat!");
}
this.drink=function(){
console.log("drink wine!");
}
}
function Son(){
this.parent=Father;//为子类添加一个特有的属性 改变父类的执行环境
this.parent();//改变了执行环境 delete this.parent;//继承完父类属性方法之后就可以把这个属性删了,注意:delete只能删除实例属性
}
var son=new Son();
console.log(son.money);
console.log(son.parent);
</script>

 

  2.继承方式二、通过call方法实现。  

    call方法使用:
         父类.call(子类[,子类继承父类的属性]); 

<script>
function Father(firstname){
this.firstname=firstname;
this.money=200000000;
this.drink=function(){
console.log("drink coffe");
}
this.dance=function(){
console.log("dancer is not dance");
}
}
function Father2(){
this.money2=300000000;
}
function Son(firstname,score){
this.score=score;
Father.call(this,firstname);
Father2.call(this);
}
var son=new Son("dancer",90);
console.log(son);
</script>

 

  3.继承方式三、通过apply继承.    

    apply使用方法:
         父类.apply(子类对象,数组)  数组中存储的是从父类继承过来的属性 

<script>
  function xiaomi5(price,size,memsize){
this.price = price;
this.size = size;
this.memsize = memsize;
this.phoneCall = function(){
console.log("打电话");
}
this.sendMessage = function(){
console.log("发短信");
}
}
function xiaomi5Plus(price,size,memsize,color){
this.color = color;//特有属性
//xiaomi5.apply(this,[price,size,memsize]);
xiaomi5.apply(this,arguments);//通过arguments接收
this.playMusic = function(){
return "播放音乐";
}
this.photo = function(){
console.log("照相");
}
}
var xm = new xiaomi5Plus(789,7,64,"white");
console.log(xm); </script>

  4.继承方式四、原型继承.

    缺点:原型继承 继承实例属性时, 子类的属性值和父类相同

     function Father(age){
this.age = age;
this.money = 2000000;
this.drink = function(){
console.log("喝酒");
}
}
Father.prototype.liaomei = function(){
console.log("撩妹");
}
function Son(){ } Son.prototype = new Father(38);//原型继承 var son = new Son();
//son.liaomei(); alert( son.age );

  5.继承方式五、混合继承.    

    通过apply或call继承实例属性
    通过原型方式 继承 原型方法
  

    function Father(money,firstname){
this.money = money;
this.firstname = firstname;
} Father.prototype.dance = function(){
console.log("跳舞");
}
Father.prototype.sleep= function(){
console.log("睡觉");
} function Son(money,firstname){
Father.call(this,money,firstname);
} //原型继承
Son.prototype = new Father(); var son = new Son("200000","王");
son.dance();

四、原型对象   prototype

  建议回复:  
  每一个构造函数都有一个prototype属性     实现:  构造函数.prototype
  每一个构造函数new出来的对象都有一个prototype属性     实现 :  对象.__proto__        指向的是prototype 
  

五、原型模式的执行流程

  建议回复:  
  1、先查找实例属性和实例方法,如果有实例属性或实例方法,就返回 该实例属性或实例方法的结果
  2、如果没有实例属性或实例方法,就去原型中查找,如果有原型属性或原型方法,就返回,如果没有,返回undefined

六、原型中的几个关键字(扩展)

  建议回复: 
  1.测试某个对象是否属于某个类的方法 isPrototypeOf()
    语法: 构造函数.prototype.isPrototypeOf(对象):判断一个对象是否指向了该构造函数的原型对象,可以使用isPrototypeOf()方法来测试               结果为boolean类型  同  instanceof 
     如:
    var arr = [];
    alert( arr instanceof Array )
 
  2.delete :删除实例属性
    语法 :  delete  对象.实例属性
 
  3.hasOwnProperty() 判断某一个对象是否包含该实例属性, 包含返回true,否则返回false   
    语法: 实例对象.hasOwnProperty("实例属性")
 
  4.in 是否存在该属性(原型或实例中)
    语法: "属性" in  对象实例

七、设计模式的概念及几种常见的设计模式

  建议回复:  
  1、什么是设计模式?    

    设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、  让代码更容易被他人理解、保证代码可靠性。
 
  2.设计模式之单例模式

js常见知识点3.面向对象之继承、设计模式的更多相关文章

  1. js常见知识点2.面向对象相关

    一.对象的概念 建议回复: 对象是一个整体,对外提供一些功能. 一切具有属性和方法的事物. 一切具有本质特征和行为的物质. 数据类型:       所有的基本数据类型都没有属性和方法.       所 ...

  2. HTML+CSS+js常见知识点

    一.HTML.CSS常见知识点 1.垂直居中盒子 /* 方法一 */ html, body { width: 100%; height: 100%; padding: 0; margin: 0; } ...

  3. js常见知识点1.ajax相关

    一. javascript中的typeof返回哪些数据类型? 建议回复: typeof 运算符把类型信息当作字符串返回.typeof 返回值有六种可能: number, string, boolean ...

  4. JavaScript面向对象(三)——继承与闭包、JS实现继承的三种方式

      前  言 JRedu 在之前的两篇博客中,我们详细探讨了JavaScript OOP中的各种知识点(JS OOP基础与JS 中This指向详解 . 成员属性.静态属性.原型属性与JS原型链).今天 ...

  5. 探讨 JS 的面向对象中继承的那些事

    最近学了 JS 的面向对象,这篇文章主要是探讨 JS 的面向对象中继承的那些事. JS中继承的特点: 1.子类继承父类: 2.子类可以用父类的方法和属性 3.子类的改变可以不影响父类 下面用一个例子来 ...

  6. JS重要知识点

    这里列出了一些JS重要知识点(不全面,但自己感觉很重要).彻底理解并掌握这些知识点,对于每个想要深入学习JS的朋友应该都是必须的. 讲解还是以示例代码搭配注释的形式,这里做个小目录: JS代码预解析原 ...

  7. JS重要知识点(转载 学习中。。。)

    这里列出了一些JS重要知识点(不全面,但自己感觉很重要).彻底理解并掌握这些知识点,对于每个想要深入学习JS的朋友应该都是必须的. 讲解还是以示例代码搭配注释的形式,这里做个小目录: JS代码预解析原 ...

  8. 【Java基础】【08面向对象_继承&方法&final】

    08.01_面向对象(代码块的概述和分类)(了解)(面试的时候会问,开发不用或者很少用) A:代码块概述 在Java中,使用{}括起来的代码被称为代码块. B:代码块分类 根据其位置和声明的不同,可以 ...

  9. Day7 初识面向对象,面向对象之继承、多态和封装

    一.面向对象引言 一.面向对象的程序设计的由来 详述见:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二.面向对象引子 写一个简单程序 ...

随机推荐

  1. Kafka学习笔记之Kafka三款监控工具

    0x00 概述 在之前的博客中,介绍了Kafka Web Console这 个监控工具,在生产环境中使用,运行一段时间后,发现该工具会和Kafka生产者.消费者.ZooKeeper建立大量连接,从而导 ...

  2. python的paramiko模块-远程登录linux主机并操作

    paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作. 如果python服务器对被远程控制机器开启了免密验证,即在python服务器上可通过ssh 用户名@被控制机 ...

  3. Vue小案例 之 商品管理------批量删除与商品数量的调整

    通过索引进行删除,进行测试,是否获取其索引: 测试效果: 测试代码,在vue中定义一个空的数组,以便后面进行数据的绑定: data:{ imgUrl:'../res/images/', imgName ...

  4. P2387 [NOI2014]魔法森林(LCT)

    P2387 [NOI2014]魔法森林 LCT边权维护经典题 咋维护呢?边化为点,边权变点权. 本题中我们把边对关键字A进行排序,动态维护关键字B的最小生成树 加边后出现环咋办? splay维护最大边 ...

  5. spring是如何控制事务

    1.spring的核心是ioc和aop,其中ioc是将控制权交由spring容器进行管理,aop是面向切面编程,内部实现使用的是动态代理,二动态代理内部实现用的是反射.spring的事务是通过aop来 ...

  6. Mysql 利用拷贝data目录文件的方式迁移mysql数据库

    Mysql 利用拷贝data目录文件的方式迁移mysql数据库 步骤如下: 1.首先要确定data目录 这个问题困扰了我很久,因为网上的帖子大部分只是说拷贝mysql数据库目录下的data文件夹中的数 ...

  7. 百度uid-generator源码

    https://github.com/baidu/uid-generator snowflake算法 uid-generator是基于Twitter开源的snowflake算法实现的. snowfla ...

  8. 经典算法分析:n与lgn

    顺序查找O(n) 二分查找O(lgn) 通过代码来感受性能差别 package recursion; /** * @author zsh * @company wlgzs * @create 2019 ...

  9. 同时import两个版本的QtQuick【1、2】,默认使用

    在同一个qml文件中,如果同时import了Qtquick1和2,那么谁在后面,谁起作用

  10. C#操作字符串方法总结

    /* ######### ############ ############# ## ########### ### ###### ##### ### ####### #### ### ####### ...