学习Javascript原型笔记(一)
来源:互联网 发布:淘宝联盟官方发单助手 编辑:程序博客网 时间:2024/04/29 01:11
最近在学JavaScript的原型,发现比较难理解,记下笔记以后多回来看,巩固基础:
1.在JavaScript中,所有函数都会有一个prototype对象属性,该函数被new操作符调用时会创建出一个对象,并且该对象中会有一个指向其原型对象的神秘链接。通过该神秘链接(某些环境中,该链接名为proto),我们就可以在新建的对象中调用相关原型对象的方法和属性。最开始创建函数时prototype属性所存储的就是原型对象,默认初始值为空对象。
2.每个对象都有一个构造器,而原型本身也是一个对象,这意味着它也必须有一个构造器,而这个构造器又会有自己的原型。
3.如果在一个对象自身属性中没有找到指定的属性,就可以去(如果存在的话)原型链中查找相关的属性。
4.对象自身属性的优先级高于原型属性。
5.并不是所有的属性都会在for-in循环中显示。例如(数组的)length属性和constructor属性就不会显示。那些已经被显示的属性被称为可枚举的,我们可以通过各个对象所提供的propertyIsEnumerable()方法来判断其中有哪些可枚举的属性。
6.原型链中的各个原型属性也会被显示出来,当然前提是它们是可枚举的。我们可以通过对象的hasOwnProperty()方法来判断一个属性是对象自身属性还是原型属性。
7.对于所有的原型属性,propertyIsEnumerable()都会返回false,包括那些在for-in循环中可枚举的属性。
8.每个对象中都有一个isPrototypeOf方法,这个方法会告诉我们当前对象是否是另一个对象的原型。
9.proto与prototype并不是等价的。proto实际上是某个实体对象的属性,而prototype则是属于构造器函数的属性。
10.当我们对原型对象执行完全替换时,可能会触发原型链子中某种异常(exception)。
11.prototype.constructor属性是不可靠的。
12.我们可以在相关的原型对象中添加新的方法和属性,甚至可以用自定义对象来完全替换掉原有的原型对象
扩展内建对象
PHP中有一个叫做in_array()的函数,主要用于查询数组中是否存在某个特定的值。Javascript中则没有一个叫做inArray()的方法,我们可以通过Array.prototype来实现一个:
if(!Array.prototype.inArray){ //先检查一下该属性是否存在 Array.prototype.inArray = function(needle){ for(var i = 0,len=this.length;i<len;i++){ if(this[i]===needle){ return true; } } return false; }}
这样,所有的数据对象都有一个新方法了,测试一下:
var a = ['red','green','blue'];a.inArray('red');//truea.inArray('yellow');//false
扩建String使其有反转字符串的功能:
if(!String.prototype.reverse){ //先检查一下该属性是否已经存在 String.prototype.reverse = function(){ return Array.prototype.reverse.apply(this.split('')).join(''); }}"Stoyan".reverse();//"nayotS"
- 学习Javascript原型笔记(一)
- JavaScript原型学习笔记
- javascript学习笔记一:javascript原型+对象字面量等
- javascript学习笔记(五)原型和原型链详解
- JavaScript中原型学习基本理解(一)
- javascript之对象学习笔记(二)--对象原型,继承
- javascript 学习笔记(1)对象和原型
- javascript 学习笔记(2) 原型链与继承
- JavaScript 学习笔记(一)
- JavaScript学习笔记(一)
- JavaScript 学习笔记(一)
- JavaScript 学习笔记(一)
- javascript学习笔记(一)
- javascript 学习笔记(一)
- JavaScript学习笔记(一)
- JavaScript学习笔记(一)
- javascript学习笔记(一)
- javascript学习笔记(一)
- bzoj 3706: 反色刷 (欧拉图+并查集)
- 栈的反转练习题
- Ext之Combobox的远程加载数据实例(附前后台代码)
- selenium简介
- 让MySql支持Emoji表情(MySQL中4字节utf8mb4字符保存方法)
- 学习Javascript原型笔记(一)
- SpringMVC实现文件上传
- 算法导论 笔记
- C++如何判断一个string字符串,是否是数字
- 如何判断js中的数据类型
- 安卓-启动Activity的两种方式
- Linux中的atexit函数
- 数据流中的中位数
- 我理解的json 20170220