1、实现继承:原型链
function extend1() {//父类型
this.name = "张三";
}
function extend2(){ //子类型
this.age =18;
}
extend2.prototype = new extend1();//extend2继承了extend1中的属性
(父类型的实例化对象赋值给子类型的原型属性,父类型中的构造函数和原型信息都会给extend2)
var _extend1 = new extend2();
console.log(_extend1.name);//张三
console.log(_extend1.age);//18
function extend3() {
this.address = "重庆";
}
extend3.prototype = new extend2();//extend3继承了extend1和extend2
var _extend2 = new extend3();
console.log(_extend2.name);//张三
console.log(_extend2.age);//18
console.log(_extend2.address);//重庆
extend1.prptotype.name = "lucy";
var _extend1 = new extend1();
console.log(_extend1.name);//张三 就近原则,现在实例里面找,有就返回,没有才去原型里面找
子类型从属于自己或他的超类型(父类型)
alert(_extend2.instanceof Object);//true
alert(_extend2.instanceof extend2);//true
alert(_extend2.instanceof extend1);//true
2、组合继承
function Group1(age) {
this.name = ["Linda",'Bob','Lucy','Anna'];
this.age = 25;
}
构造函数里的方法放在构造里每次实例化都会分配一个内存地址(浪费),放在原型里保证每次实例化都只有一个引用地址:
Group1.prototype.run = function () {
return this.name + ',' + this.age;
}
function Group2(age) {
Group1.call(this,age);//对象冒充只能继承构造实例中的,不能继承原型中的信息
}
Group2.prototype = new Group1();//原型链继承,否则原型里的run方法是访问不到的
var _group1 = new Group2(20);
console.log(_group1.run());
3、原型式继承
1. 临时中转函数
function obj (o) {//o表示杨要穿ID进的一个对象
function F(){};//F构造函数是一个临时新建的对象,用于存储传过来的对象
F.prototype = o; //jiango对象实例赋值给F构造函数的原型对象
return new F(); //返回这个得到传递过来对象的对象实例
}
2. 字面量的声明方式(相当于 var box = new Box();)
var box= {
name:"Lucy",
age :100
}
F.prototype = 0;//
var box1 = obj(box);box1就等于 new F();
alert(box1.name);//lucy
4、寄生式继承=原型式+工厂模式
1. 临时中转函数
function obj (o) {//o表示杨要穿ID进的一个对象
function F(){};//F构造函数是一个临时新建的对象,用于存储传过来的对象
F.prototype = o; //jiango对象实例赋值给F构造函数的原型对象
return new F(); //返回这个得到传递过来对象的对象实例
}
//寄生函数
function create(o){
var f = obj(o);
f.run = function(){
return this.name + "方法";
}
return f;
}
var box= {
name:"Lucy",
age :100
}
var box1 = create(box);
alert(box1.run());//lucy方法
5、寄生式组合继承(最终完美版本)
1. 临时中转函数
function obj (o) {//o表示杨要穿ID进的一个对象
function F(){};//F构造函数是一个临时新建的对象,用于存储传过来的对象
F.prototype = o; //jiango对象实例赋值给F构造函数的原型对象
return new F(); //返回这个得到传递过来对象的对象实例
}
2.寄生函数
function create(box,desk){
var f = obj(box.prototype);
desk.prototype = f;
return f;
}
3.构造函数
function Box(name,age){
this.name = name;
this.age = age;
]
4.原型式方法
Box.prototypr.run = function(){
return this.name + this.age + "运行中..."
}
5.对象冒充
function Desk(name,age){
Box.call(this,name,age);
}
6.通过寄生组合继承来实现继承
create(Box,Desk);//用于替代 Desk.prototype = new Box();
- 【 js 基础 】Javascript “继承”
是时候写一写 "继承"了,为什么加引号,因为当你阅读完这篇文章,你会知道,说是 继承 其实是不准确的. 一.类1.传统的面向类的语言中的类:类/继承 描述了一种代码的组织结构形式. ...
- 【 js 基础 】【读书笔记】Javascript “继承”
是时候写一写 “继承”了,为什么加引号,因为当你阅读完这篇文章,你会知道,说是 继承 其实是不准确的. 一.类1.传统的面向类的语言中的类:类/继承 描述了一种代码的组织结构形式.举个例子:“汽车”可 ...
- JS基础-全方面掌握继承
前言 上篇文章详细解析了原型.原型链的相关知识点,这篇文章讲的是和原型链有密切关联的继承,它是前端基础中很重要的一个知识点,它对于代码复用来说非常有用,本篇将详细解析JS中的各种继承方式和优缺点进行, ...
- 基础3:js实现继承的多种方式
js实现继承的多种方式 1. 原型链继承 function Parent() { this.name = 'xwk' } Parent.prototype.getName = function() { ...
- js基础篇——call/apply、arguments、undefined/null
a.call和apply方法详解 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象 ...
- AJAX学习前奏----JS基础加强
AJAX学习前奏----JS基础加强 知识概要: 1.js类&属性&方法的定义 2.静态属性与方法 3.构造方法 4.原型的使用 5.Object对象直接加属性和方法 6.JSO ...
- js基础--javaScript数据类型你都弄明白了吗?绝对干货
欢迎访问我的个人博客:http://www.xiaolongwu.cn 数据类型的分类 JavaScript的数据类型分为两大类,基本数据类型和复杂数据类型. 基本数据类型:Null.Undefine ...
- JS基础学习1
1 JS 概述 一个完整的javascript实现是由以下3个不同部分组成的: (1) 核心(ECMAscript) (2) 文档对象模型(DOM) Document object ...
- 前端面试题目汇总摘录(JS 基础篇)
JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string typeof null; // o ...
随机推荐
- PHP是解释型语言:边解析边运行
计算机语言的发展史: 第一代:机器语言,全部都是01010二进制代码,计算机能够直接的识别,运行效率是最高的,但是难编,难记,难区分,可移植性差! 第二代:汇编语言,其实就是符号化的机器语言,增加了编 ...
- python中sort排序
排序并且改变自身结果: nums.sort()
- python 类的创建
- HZOJ Dash Speed
测试点1-2:暴力. 测试点3-4:可以将边按r从大到小排序不断加入,然后用并茶几维护深度.好像也可以用猫树做. 好吧其他的部分分并没有看懂. 正解: 线段树分治,求出每个速度的答案. 对于速度区间$ ...
- & 和 | 和 ~
O(∩_∩)O~~浅理解,不足之处请多指正,谢谢. 1) & & :二目运算符,把运算符两侧的数换成 二进制 再依次求与. 例如:a = 2,b = 3; c = a & b; ...
- 随机数专题 Day08
package com.sxt.arraytest2; import java.util.Arrays; /* * 随机数专题 * Math类的random()方法 * m~n的随机数 * 公式:(i ...
- iOS 9整理
WWDC 2015上那些酷酷的新内容(一) http://www.cocoachina.com/apple/20150611/12120.html
- oracle函数 ROWIDTOCHAR(rowid)
[功能]转换rowid值为varchar2类型 [参数]rowid,固定参数 [返回]返回长度为18的字符串 [示例] SELECT ROWIDTOCHAR(rowid) FROM DUAL; [说明 ...
- Git 进阶:10大技巧让你迅速提升
1.Git自动补全 假使你使用命令行工具运行Git命令,那么每次手动输入各种命令是一件很令人厌烦的事情. 命令: cd ~ curl https://raw.github.com/git/git/ma ...
- 初识block
我们可以把Block当做Objective-C的匿名函数.Block允许开发者在两个对象之间将任意的语句当做数据进行传递,往往这要比引用定义在别处的函数直观.另外,block的实现具有封闭性(clos ...