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. Utils使用

    获取两个时间之间的天数 var startDate = new Date(_startDate).getTime(); var endDate = new Date(_endDate).getTime ...

  2. android中配置文件property的用途以及使用<转>

    1.首先在源代码根目录(src下)下创建一个名为netconfig.properties的文件(也可以在其他目录下). 2.打开netconfig.properties文件,在该文件中添加下列代码. ...

  3. mysqldump之不老将

    –add-drop-database 每个数据库创建之前添加drop数据库语句.mysqldump -uroot -p –all-databases –add-drop-database –add-d ...

  4. redis启动.停止.重启

    Linux下安装 ]# wget http://download.redis.io/releases/redis-2.8.17.tar.gz ]# tar xzf redis-2.8.17.tar.g ...

  5. (1)shiro简介和第一个demo

    之前一直在用shiro开发,不过只是会使用,并没有深入了解,最近有时间学习了一下,把最近学习所得分享一下. shiro简介 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授 ...

  6. Docker之My sql 之旅

    要用到mysql 数据库,本来想在本机装,后来想想还是有点污染环境,既然有docker为什么不用呢? 于是开启了采坑之旅,与其说采坑,倒不如说看文档不仔细看. docker pull mysql:5. ...

  7. 页面中 json 格式显示 数据

    在页面中,有时候我们需要的不仅仅是将数据显示出来,而且要以以 json 的格式显示数据,如显示接口的时候 我们需要如下显示 这个时候,主要用到了 <pre> 标签 $.get(" ...

  8. scala spark rdd转数据框

    1. http://blog.csdn.net/lw_ghy/article/details/51480358

  9. keras各种优化方法总结 SGDmomentumnesterov

    http://blog.csdn.net/luo123n/article/details/48239963 前言 这里讨论的优化问题指的是,给定目标函数f(x),我们需要找到一组参数x,使得f(x)的 ...

  10. 10.9zuoye

    public class fulei { public fulei() { System.out.println("欢迎使用海尔"); } public String Pinpai ...