原型规则

原型规则

所有的引用类型(数组、对象、函数),都具有对象特征,即可自由扩展属性;

var arr = []; arr.a =1;
  • 所有的引用类型都有对象的特性,即可自由扩展
  • 所有的引用类型都有一个_proto_属性(隐式原型),属性的值是一个普通对象
  • 所有函数,都具有一个prototype(显示原型),属性值也是一个普通原型
  • 所有的引用类型(数组、对象、函数),其隐式原型指向其构造函数的显式原型;(obj.proto === Object.prototype)
  • 当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么回去它的_proto_(即它的构造函数的prototype)中去寻找

原型对象

prototype 在js中,函数对象其中一个属性:原型对象prototype。普通对象没有prototype属性,但有_proto_属性。 原型的作用就是给这个类的每一个对象都添加一个统一的方法,在原型中定义的方法和属性都是被所以实例对象所共享。

var person = function(name){this.name = name
};
person.prototype.getName=function(){//通过person.prototype设置函数对象属性return this.name;
}
var crazy= new person(‘crazyLee’);
crazy.getName(); //crazyLee//crazy继承上属性

原型链

当试图得到一个对象f的某个属性时,如果这个对象本身没有这个属性,那么会去它的_proto_(即它的构造函数的prototype)obj._proto_中去寻找;当obj._proto也没有时,便会在obj._proto.proto(即obj的构造函数的prototype的构造函数的prototype)中寻找

设计模式

工厂模式

在函数内创建一个对象,给对象赋予属性及方法再将对象返回

function Person() {var People = new Object();People.name = 'CrazyLee';People.age = '25';People.sex = function(){return 'boy';};return People;
}var a = Person();
console.log(a.name);//CrazyLee
console.log(a.sex());//boy

构造函数模式

无需在函数内部重新创建对象,而是用this指代

function Person() {this.name = 'CrazyLee';this.age = '25';this.sex = function(){return 'boy'};}var a = new Person();
console.log(a.name);//CrazyLee
console.log(a.sex());//boy

原型模式

函数中不对属性进行定义,利用prototype属性对属性进行定义,可以让所有对象实例共享它所包含的属性及方法

function Parent() {Parent.prototype.name = 'carzy';Parent.prototype.age = '24';Parent.prototype.sex = function() { var s="女";    console.log(s);}
}var  x =new  Parent();
console.log(x.name);      //crazy
console.log(x.sex());       //女

混合模式

原型模式+构造函数模式。这种模式中,构造函数模式用于定义实例属性,而原型模式用于定义方法和共享属性

function Parent(){  this.name="CrazyLee";  this.age=24;
};
Parent.prototype.sayname=function(){  return this.name;
};var x =new Parent();
console.log(x.sayname());   //Crazy  

动态原型模式

将所有信息封装在了构造函数中,而通过构造函数中初始化原型,这个可以通过判断该方法是否有效而选择是否需要初始化原型

function Parent(){  this.name="CrazyLee";  this.age=24;  if(typeof Parent._sayname=="undefined"){     Parent.prototype.sayname=function(){  return this.name;  }  Parent._sayname=true;  }
};   var x =new Parent();
console.log(x.sayname());

参考:《原型设计模式以及JavaScript中的原型规则》

ps:文末附上汇总文章链接《一名【合格】前端工程师的自检清单【自检ing】》

理解原型设计模式以及JavaScript中的原型规则相关推荐

  1. js-- 原型设计模式以及JavaScript中的原型规则

    原型规则 原型规则 所有的引用类型(数组.对象.函数),都具有对象特征,即可自由扩展属性: var arr = []; arr.a =1; 复制代码 所有的引用类型,都有一个_proto_ 属性(隐式 ...

  2. javascript原型_在JavaScript中冻结原型时会发生什么

    javascript原型 Have you wondered what happens when you freeze the prototype of an object? Let's find o ...

  3. 理解JavaScript中的原型继承(2)

    两年前在我学习JavaScript的时候我就写过两篇关于原型继承的博客: 理解JavaScript中原型继承 JavaScript中的原型继承 这两篇博客讲的都是原型的使用,其中一篇还有我学习时的错误 ...

  4. 理解JavaScript中的原型与原型链

    理解JavaScript中的原型与原型链 原型链是一种机制,指的是JavaScript中每个内置的对象都有一个内置的__proto__属性指向创建它的构造函数的prototype(原型)属性.原型链的 ...

  5. js实现html模板继承,理解JavaScript中的原型和继承

    本文主要讲了原型如何在JavaScript中工作,以及如何通过[Prototype]所有对象共享的隐藏属性链接对象属性和方法:以及如何创建自定义构造函数以及原型继承如何工作以传递属性和方法值. 介绍 ...

  6. JavaScript中的原型(prototype)与继承

    在JavaScript中,原型是用来模仿其他「类」语言继承机制的基础.原型并不复杂,原型只是一个对象. 一.原型对象 1.1 什么是原型对象 每当我们创建了一个函数后,这个函数就拥有了一个protot ...

  7. JavaScript中的原型和继承

    请在此暂时忘记之前学到的面向对象的一切知识.这里只需要考虑赛车的情况.是的,就是赛车. 最近我正在观看 24 Hours of Le Mans ,这是法国流行的一项赛事.最快的车被称为 Le Mans ...

  8. JavaScript中的原型继承原理

    在JavaScript当中,对象A如果要继承对象B的属性和方法,那么只要将对象B放到对象A的原型链上即可.而某个对象的原型链,就是由该对象开始,通过__proto__属性连接起来的一串对象.__pro ...

  9. JavaScript中的原型和原型链

    前言 JS中的原型和原型链应该算是比较经典的话题了,很多人只了解了其表面(在创建构造函数的时候使用prototype属性声明公共方法),但是在面试中也会经常问到其中的原理,这时候就答不出来了(比如我) ...

最新文章

  1. python公共操作(运算符(+、*、in、not in)、公共方法(len()、del、max()、min()、range()、enumerate())、类型转换(tuple、list、set))
  2. Web离线应用解决方案——ServiceWorker
  3. linux ls只显示文件名或者文件夹名
  4. Pandas的学习(读取mongodb数据库集合到DataFrame,将DataFrame类型数据保存到mongodb数据库中)
  5. 你所能用到的数据结构(四)
  6. 如何把密度函数化为标准正态二维分布_概率微课:第三章(22) 二维随机变量及分布函数定义...
  7. datagridview 绑定list 不能刷新界面_人人都可写代码-H5零基础编程-发布活动界面实操07...
  8. 【java】Java内省Introspector
  9. 两年前端菜鸟回忆篇(1)
  10. 解决Eclipse编译web项目失败问题
  11. pytorch中lr_scheduler的使用
  12. Arm汇编 位置无关代码 adr 指令
  13. shell command cat/find/tr/mkdir
  14. 树莓派导入h5模型出错OSError: SavedModel file does not exist at: model.h5/{saved_model.pbtxt|saved_model.pb}
  15. 时间序列分析之协整检验
  16. 如何缩小图片大小kb?
  17. 电磁阀、电磁铁的工作原理说明
  18. 软件图标显示不正常的问题
  19. javascript DOM 操作基础知识小结
  20. 锐捷交换机的环路检测

热门文章

  1. Java基础2面向对象和数组
  2. 用opnet仿真停等协议
  3. 兴也早、亡也早,3D电视还能“王者归来”?
  4. 协同办公平台也可以自己搭建,免费kodexplorer使用方法
  5. 脑力风暴之小毛驴历险记(1)----好多胡萝卜(上)
  6. 一元二次方程 - 根与系数的关系
  7. 光伏汇流箱中霍尔传感器的作用
  8. 请用python编写日语文本分析脚本,并使结果可视化
  9. 狐火浏览器禁用JavaScript方法
  10. Python语言程序设计基础 第二版(嵩天著)课后答案第三章(程序练习题)