js中的原型与原型链的一点理解
2016-06-06 12:44
573 查看
凡是通过new Function() 创建的对象都是函数对象,其他的都是普通对象
在js中,每当定义一个对象时,对象都会包含一些预定义的属性。其中,函数对象的一个属性就是原型对象prototype。注意:普通对象没有prototype,但有__proto__属性function f1(){}; console.log(f1.prototype); // f1{} /* 由上文可以看出,f1.prototype就是f1的一个实例对象。就是在f1创建的时候,创建了一个它的实例对象并复制给它的prototype,基本过程如下: var tmp = new f1(); f1.prototype = tmp; */ console.log(typeof f1.prototype);// Object console.log(typeof Function.prototype);// Function ,这个最特殊 console.log(typeof Object.proptype); // Object console.log(typeof Function.prototype.prototype); // undefined
原型对象用来做什么呢?主要作用是用于继承
var Person = function (name) { this.name = name; } Person.prototype.getName = function(){ return this.name; } var zhagnshan = new Person('zhangshan'); console.log(zhangshan.getName()):// zhangshan
原型链
JS 在创建对象的时候,都有一个叫做__ptoto__的内置属性,用于指向创建它的函数对象prototype。以上面的例子为例:console.log(zhangshan.__prototype__ === Person.prototype);// true // Person.prototype 对象也有__proto__属性,它指向创建它的函数对象(Object)的prototype console.log(person.prototype.__proto__ == Object.prototype);// true // Object.prototype 对象也有__ptoto__ 属性,但它比较特殊,为null console.log(Object.prototype.__proto__);// null // 这个由__proto__串起来的直到Object.prototype.__proto__为null 的链叫做原型链 ![](~/11-05-24.jpg) // 栗子 // prototype 就是函数自身的一个实例对象 // __proto__ 指向创建它的(即父亲的)函数对象prototype ,即父亲函数对象的一个实例对象 var animal = function (){}; var dog = function(){}; animal.price = 2000; // dog 的实例对象将具有animal 的一切属性 // dog.__proto__ = Function.prototype; // dog.prototype = new Function(); dog.prototype = animal; // dog.__proto__ = Function.prototype; // dog.prototype = animal; var tidy = new dog(); // tidy.__proto__ = dog.prototype = animal; // dog.price = dog.__proto__.price = Function.prototype.price = undefined; // tidy.price = tidy.__proto__.price = dog.prototype.price = animal.price; console.log(animal); console.log(dog.prototype); console.log(dog.price,dog.__proto__.price); console.log(tidy.price,tidy.__proto__.price,dog.prototype.price,animal.price);
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享