一、面向对象的三大特征

  建议回复: 
  封装:屏蔽内部细节、调用外部接口实现对应功能(函数调用)
  继承:子类继承父类中的属性和方法
  多态(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. markdownpad2-注册码-2017-02-23

    MarkdownPad2.5/2 注册码   User: Soar360@live.com 授权: GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImD ...

  2. Codeforces 375C Circling Round Treasures - 最短路 - 射线法 - 位运算

    You have a map as a rectangle table. Each cell of the table is either an obstacle, or a treasure wit ...

  3. 【Python029--一个任务】

    一.文件编写 任务:将文件(record.txt)中的数据进行分割,并按照以下规律保存起来: --小甲鱼的对话单独保存为boy_*.txt的文件(去掉“小甲鱼:”) --小客服的对话单独保存为girl ...

  4. OCX ClassId查看

    1.源码中查看 2.注册完成后在注册表中查看 a.windows键+R  打开“运行” b.输入“regedit”  ,回车 c. d.再输入框中输入ocx名称,点击查找下一个 e.展开,点击CLSI ...

  5. AndroidO Treble架构分析【转】

    本文转载自:https://blog.csdn.net/yangwen123/article/details/79835965 从AndroidO开始,google引入了Treble架构,目的是为了方 ...

  6. thinkphp在前端页面的js代码中可以使用 U方法吗? 可以使用模板变量如__URL__等吗?

    thinkphp在前端页面的js代码中可以使用 U方法吗? : 可以的! tp的U方法, 是"全局的", 什么是全局的? 就是, 可以在 "任何地方"使用的: ...

  7. [NOI1995]石子合并 四边形不等式优化

    链接 https://www.luogu.org/problemnew/show/P1880 思路 总之就是很牛逼的四边形不等式优化 复杂度\(O(n^2)\) 代码 #include <ios ...

  8. SpringBoot 超时设置

    1.RestTemplate超时 设置配置HttpComponentsClientHttpRequestFactory中的RequestConfig属性 RestTemplateConfig: imp ...

  9. 取球游戏|2012年蓝桥杯B组题解析第十题-fishers

    (25')取球游戏 今盒子里有n个小球,A.B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断. 我们约定: 每个人从盒子中取出 ...

  10. 【译】第37节---EF6-异步查询和保存

    原文:http://www.entityframeworktutorial.net/entityframework6/async-query-and-save.aspx 你可以在.NET4.5下使用 ...