function inherit(Target,Origin){
function F(){};
F.prototype = Origin.prototype;  //
Targrt.prototype = new F();
Target.prototype.constructor = Target;  //增加自己的constructor
Target.prototype._super = Origin;  //找到自己的超类
}

function F(){};    中间函数
F.prototype = Origin.prototype;  
Targrt.prototype = new F();
或者

function proto(target,obj){
function Fn(){};
Fn.prototype = obj.prototype;
target.prototype = new Fn();
}
function proto2(target,obj){
function Fn(){};
Fn.prototype = obj.__proto__;
target.__proto__ = new Fn();
}
function son(){
this.name = 'tom';
};
function father(){
this.name = 'jim';
};
father.prototype = {
lastName:'Green'
}
//proto(son,father);
var s1 = new son();
var f1 = new father();
proto2(s1,f1);
console.log(s1.lastName);

类似的方法:原型继承

function Obj(o){
function f(){};
f.prototype = o;
return new f();
} function person(name,age){
this.name = name;
this.age = age;
} person.prototype.say = function(){
console.log(this.name+' : '+this.age);
}
var p1 = Obj(new person('zhangsan',23));
var p2 = Obj(new person('zhangsan',23));
console.log(p1);
console.log(p2);
console.log(p1.__proto__ === p2.__proto__);//false
console.log(p1.__proto__.__proto__ === p2.__proto__.__proto__);//true
p1.name1 = 'zhangsan';
p2.name1 = 'lisi';
p1.__proto__.name = 'liuliu';
console.log(p1);
console.log(p2);
//so要把原型的constructor回归到原型
p1.__proto__.constructor = person;
p1.__proto__._superProto = person.prototype;
console.log(p1.__proto__.constructor);
console.log(p1.__proto__._superProto);

闭包形式

        var inherit = (function(){
var F = function(){}
return function(Target,Origin){
F.prototype = Origin.prototype;
Target.prototype = new F();
Target.prototype.constructor = Target;
Target.prototype._super = Origin;
console.log(1);
}
}())
function Father(){};
Father.prototype.name = 'zhang';
function Son(){};
inherit(Son,Father);
var father = new Father();
var son = new Son();
console.log(son.name);
问题:
var father = new Father();
var son = new Son();//son指向一个Son()对象 ,(son.__proto__ === Son.prototype)Son.prototype指向一个空间,
inherit(Son,Father);//Son.prototype指向了另一个空间,但是son.__proto__指向的空间并没有变化,所以name属性找不到 
console.log(son.name);//undefined

实例:
        function Father(){};
Father.prototype.lastName = 'Zhangsan';
var F = new Father();
function Son(){};
Father.prototype = new Son();
var P = new Father();
console.log(F.lastName);//zhangsan
console.log(P.lastName);//undefined

继承方法-->最终模式的更多相关文章

  1. JavaScript 方法调用模式和函数调用模式

    这两天在读<JavaScript语言精粹>关于第4章函数调用的几种模式琢磨了半天. 这里就说一下方法调用模式跟函数调用模式. 方法调用模式: 当一个函数被保存为对象的一个属性时,我们称它为 ...

  2. js继承的几种方法和es6继承方法

        一.原型链继     1.基本思想     利用原型链来实现继承,超类的一个实例作为子类的原型     2.具体实现     function F() {}     //原型属性,原型方法: ...

  3. javascript创建对象的方法--原型模式

    javascript创建对象的方法--原型模式 一.总结 1.原型模式解决内存浪费的方法(继承):通过继承,对象继承原型模式下的所有属性,对象不同于其它对象的的属性自己创建或者修改 2.原型的使用(p ...

  4. JS中常见的几种继承方法

    1.原型链继承 // 1.原型链继承 /* 缺点:所有属性被共享,而且不能传递参数 */ function Person(name,age){ this.name = name this.age = ...

  5. JavaScript面向对象继承方法

    JavaScript的出现已经将近20多年了,但是对这个预言的褒贬还是众说纷纭.很多人都说JavaScript不能算是面向对象的变成语言.但是JavaScript的类型非常松散,也没有编译器.这样一来 ...

  6. JS中的类,类的继承方法

    大牛请无视此篇! 首先我们定义一个类,方法很简单,就像我们定义函数一样,只不过我们为了与函数区分,名称首字母要大写,看代码: function Person (){ } 这就是一个很简单的Poson类 ...

  7. 《objective-c基础教程》学习笔记(五)—— 继承方法

    在上一篇博文中,我们将原先的纯C语言代码,编写成了用Objective-C(后面直接缩写成OC)的写法.使得代码在易读性上有明显提升,结构也更清晰.同时,也对面向对象的概念有了进一步的介绍和加深. 但 ...

  8. 设计模式之工厂方法(FactoryMethod)模式

    在五大设计原则的基础上经过GOF(四人组)的总结,得出了23种经典设计模式,其中分为三大类:创建型(5种).结构型(7种).行为型(11种).今天对创建型中的工厂方法(FactoryMethod)模式 ...

  9. Date类型之继承方法

    ECMAScript中的Date类型是在早期Java中的java.util.Date类型基础上构建的.为此,Date类型使用自UTC(国际协调时间)1970年1月1日午夜零时开始经过的毫秒数来保存日期 ...

随机推荐

  1. cv::Mat到YUV420的转换《转》

    某些特定场合我们会经常遇到yuv420格式的视频文件,这种视频帧无法直接用于opencv,故而,需要进行格式转换:幸运的是,opencv提供了rgb到yuv420的格式转换函数:下面给出基本用法: 函 ...

  2. Centos7 vnc

    这是一个关于怎样在你的 CentOS 7 上安装配置 VNC 服务的教程.当然这个教程也适合 RHEL 7 .在这个教程里,我们将学习什么是 VNC 以及怎样在 CentOS 7 上安装配置 VNC ...

  3. 《Blue Flke》第一次作业:团队亮相

    1.队名:Blue Flke 团队格言:决心是成功的力量,耐心是成功的保障. 2.团队成员组成:  201571030129/ 王胜海 (组长)  201571030126/ 妥志福 20157103 ...

  4. Android自定义实现微信标题栏

    Android自定义实现微信标题栏     前言:在android的开发中有时我们需要更个性化的标题栏,而不仅仅是系统预定义的图标加软件名,同时有时候我们需要在标题栏中实现更多功能,如添加按钮响应用户 ...

  5. 网络基础相关的知识 socket模块

    1.架构 1.C/S架构:client客户端和server服务器端 优势:能充分发挥pc机的性能 2.B/S架构:browser浏览器和server服务器    隶属于C/S架构 B/S架构  统一了 ...

  6. Weblogic 12c 一个domain建多个server(端口)

    一.基本概念 我觉得如果刚接触Weblogic,首先应该做的是明白几个基本的概念,可以从一张图入手: 1. 域(domain) 它是一个基本管理单元: 每个域包含一个管理服务器(Administrat ...

  7. 4-js 函数

    总是有些奇奇怪怪的问题: <div> <p class="productStatus"> <span>成交量 <em>${goods ...

  8. ImageView小技巧

    ImageView截取图片的方式 centerCrop:以中心点为基准 将图片的最短边与ImageView宽度匹配 其他部分裁掉centerInside: 以中心点为基准 将图片最长边 缩进控件去

  9. 【SQL模板】二.创建表视图模板TSQL

    ---Name: 创建表视图模板.sql ---Purpose: 用于创建 数据库中 新的数据表/视图 ---Author: xx ---Time: 2015-12-18 10:26:06 ---Re ...

  10. Tomcat端口被占用解决方法

    端口被绑定,在命令提示符运行wmic process where "Caption='javaw.exe' and CommandLine like '%%bootstrap.jar%%'& ...