这篇内容也是之前讲到过的,纯属无聊,莫要见怪。~(~ ̄▽ ̄)~~(~ ̄▽ ̄)~~(~ ̄▽ ̄)~~(~ ̄▽ ̄)~~(~ ̄▽ ̄)~

正如上文所说,如果所有的prototype属性都指向了一个相同的对象,父级对象就会受到子级对象的影响,这不是我们想要的一种结果。

要解决这个问题,我们就要给她们找个第三者了,来破坏她们之间这种暧昧的关系,那么我们可以利用一个空函数F(),并将她的原型设置为我们的父级构造函数,然后我们可以new F()来创建不包含父级对象属性的对象,也就是说父级的属性我这里是不能再设置的,同时又可以继承父对象的一切属性了。虽然有点绕,看个小例子理解一下:

function her(){};
her.prototype.name = 'Anna';
her.prototype.toString = function(){
    return this.name;
}
function his(){};
var F = function(){};
F.prototype = her.prototype;
his.prototype = new F();
his.prototype.constructor = his;
his.prototype.name = 'Jock';
his.prototype.sex = 'men';
function child(width, height){
    this.width = width;
    this.hieght = height;
}
var F = function(){}
F.prototype = his.prototype;
child.prototype = new F();
child.prototype.constructor = child;
child.prototype.name = 'Alen';

通过这种方法,我们就可以保持住原型链,(有时候两个人还是之间还是需要个第三者来调剂一下生活的,不然会不会很无趣?)

my._proto_ === child.prototype;  // true
my._proto_.constructor === child;  // true
my._proto_._proto_ === his.prototype; // true
my._proto_._proto_._proto_.constructor === her;  // true

并且父对象的属性不会被子对象的属性所覆盖。

javascript --- 临时构造器F()的更多相关文章

  1. 24 JavaScript对象访问器&JavaScript对象构造器

    ES5引入了Getter和Setter Getter和Setter允许定义对象访问器 JavaScript Getter(get关键字):获取对象属性 <script> var perso ...

  2. javascript中构造器(函数)的__proto__与prototype初探

    背景:最近没什么需求,快要闲出屁了,所以重温了一下js的原型,结果大有收获,且偶然看到Snandy大神的<JavaScript中__proto__与prototype的关系> 这篇文章,感 ...

  3. JavaScript的构造器与对象(二)

    constructor 的用法:对象的构造函数  每一个函数的Prototype属性指向的对象都包含唯一一个不可枚举属性constructor,该属性的值是这么一个对象:它指向了它所在的构造函数. 语 ...

  4. javascript 中继承实现方式归纳

    转载自:http://sentsin.com/web/1109.html 不同于基于类的编程语言,如 C++ 和 Java,javascript 中的继承方式是基于原型的.同时由于 javascrip ...

  5. 总结javascript继承的两种方式的N中写法

    最近翻看博客园,总结了一下javascript的继承方式:prototype和copy继承方式. 一.prototype方式 当一个函数被创建时,Function构造函数产生的函数会隐式的被赋予一个p ...

  6. JavaScript中的constructor和继承

    概述 这是我在看JavaScript面向对象编程指南的时候,对constructor和继承的总结. 关于它们的详细知识,可以上网查到,所以我只写那些网上没有的. 内容 constructor的理解 c ...

  7. javascript的面向对象思想知识要点

    获取数据类型 typeof undefined:访问某个不存在的或未经赋值的变量时就会得到一个 undefined,用typeof 获取类型,得到的也是undefined;null:它不能通过java ...

  8. 《面向对象的JavaScript》读书笔记

    发现了2004年出版的一本好书,用两天快速刷了一遍,草草整理了一下笔记,在此备忘. 类:对象的设计蓝图或制作配方. 对象 === 实例 :老鹰是鸟类的一个实例 基于相同的类创建出许多不同的对象,类更多 ...

  9. javascript --- 继承小结

    回顾之前学到的知识,大体上可以分为两类: 1. 基于构造器工作的模式. 2. 基于对象的工作模式. 3. 是否使用原型 4. 是否执行属性拷贝. 5. 两者都有(执行原型属性拷贝) 下面我们把之前的知 ...

随机推荐

  1. Setting title-center on "< h1> " element on Android does not work, fix

    app.scss: h1.title-center{ text-align: center!important; }

  2. category常量及对应字符串

  3. 自己做一款简易的chrome扩展--清除页面广告

    大家肯定有这样的经历,浏览网页的时候,左右两端广告,诸如“屠龙宝刀,点击就送”,以及最近火的不行的林子聪37传奇霸业什么“霸业面具,霸业吊坠”的魔性广告总是充斥我们的眼球. 当然有现成的扩展程序或者插 ...

  4. Python之log的处理方式

    配置文件: #! /usr/bin/env python # -*- coding: utf-8 -*- """ logging配置 """ ...

  5. 使用Jquery与vuejs操作dom比较

    jquery实现添加功能 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  6. Xpath - Xpath定位

     selenium 提供的xpath定位方法名为:find_element_by_xpath(xpath表达式) Xpath基本定位语法: / 绝对定位,从根节点选取 // 相对定位,从匹配选择的当前 ...

  7. [python xml 学习篇][0]

    tree = ET.parse("Result.xml")root = tree.getroot()print type(root)print root.tag # 得到root ...

  8. dpkg: deb包的操作命令

    dpkg -i package.deb #安装包 dpkg -r package #删除包 dpkg -P package #删除包(包括配置文件) dpkg -L package #列出与该包关联的 ...

  9. 解决MySQL版本之间造成的乱码、数据查询不出的问题

    在数据库连接字符串上加  charset=utf8 <connectionStrings> <add name="XJRDSModels" connectionS ...

  10. 大数相减 C语言

    #include <stdio.h> #include <string.h> using namespace std; ],b[]; void Sub() { ; if(a = ...