一句话简单理解javascript中的原型对象
通过构造函数F创建的对象实例p 这个对象p的原型对象是 构造函数中prototype属性指向的对象s,
这个对象p中也有个非标准的__proto__属性指向构造函数prototype属性
所指向的对象s,所以就有 p.__proto__ === F.prototype;
在对象P的原型对象s中有个属性constructor属性,指向的是构造函数本身。
如果对象p的原型对象s被重写,那么P的构造函数不再是F,而是Object
例如:
function F(){};
var p = new F();
console.log(p.__proto__ === F.prototype)//true
console.log(p.constructor === F) //true
console.log(p instanceof F) //true
F.prototype = {};//重写原型对象
p2 = new F() //重新实例一个对象p2
console.log(p instanceof F,p2 instanceof F) //false,trueinstanceof
运算符返回一个布尔值,
//instanceof运算符可以用来判断某个构造函数的prototype属性是否存在另外一个要检测对象的原型链上。
//instanceof
运算符用来检测constructor.prototype
是否存在于参数object
的原型链上。 /*
Instanceof的判断队则是:沿着A的__proto__这条线来找,同时沿着B的prototype这条线来找,如果两条线能找到同一个引用,即同一个对象,那么就返回true。如果找到终点还未重合,则返回false。 */
console.log(p.constructor === F) //true
console.log(p2.constructor === F)//false
console.log(p2.constructor === Object)//true
//我们重写F.prototype的时候,并没有改变p1属性prototype的指向,它指向的还是老的那个F.prototype 对象
//原型的动态性 强调的前提是同一个原型对象,即对象(p1)指向的原型对象和类(F)指向的原型对象是同一个,
//当发生原型对象重写的时候,实际上是有个两个原型对象的,一个新的,一个老的。
instanceof 复杂用法:
function Ben() {}
console.log(Object instanceof Object); //true
console.log(Function instanceof Function); //true
console.log(Function instanceof Object); //true
console.log(Ben instanceof Function); //true
console.log(String instanceof String); //false
console.log(Boolean instanceof Boolean); //false
console.log(Ben instanceof Ben); //false
在这里构造函数F也是对象,所以F也有原型对象s2,F的原型对象s2 是 构造函数Function中原型属性prototype所指向的原型对象s2;
Function函数也是对象所以,Function函数的构造函数也是Function...因此所有函数都是由Function构造函数的实例(包括function Object(){})
Function的原型属性prototype指向的对象和Function的原型对象__proto__ 指向的对象相等 并且Function.__proto__对象是一个特殊的函数对象,
不具有prototype属性
console.log(F.__proto__ === Function.prototype)//true
console.log(Function.__proto__ === Function.prototype) //true function(){}
console.log(Function.__proto__.__proto__ === Object.prototype)//true
console.log(Object.prototype.__proto__ === null)//true
对象字面量产生的对象连接到Object.prototype。函数对象连接到Function.prototype(该原型对象本身连接到Object.prototype).
最后一张图理解Object和Function
(转):
一句话简单理解javascript中的原型对象的更多相关文章
- 简单理解javascript中的原型对象,实现对之间共享属性和行为
javascript中提供了构造函数.可以方便的创建对象. 典型的构造函数例如以下: function Person(name, age) { this.name = name; this.age = ...
- 理解JavaScript中的原型继承(2)
两年前在我学习JavaScript的时候我就写过两篇关于原型继承的博客: 理解JavaScript中原型继承 JavaScript中的原型继承 这两篇博客讲的都是原型的使用,其中一篇还有我学习时的错误 ...
- 理解javascript中的原型模式
一.为什么要用原型模式. 早期采用工厂模式或构造函数模式的缺点: 1.工厂模式:函数creatPerson根据接受的参数来构建一个包含所有必要信息的person对象,这个函数可以被无数次的调用,工厂 ...
- 如何理解JavaScript中的原型和原型链
首先是一张关系图,避免抽象化理解时产生的困难 Function对象 函数对象是JavaScript学习中不可避免的一部分,而且这一部分相对重要且抽象 函数的创建方式有2种: 字面量创建 var foo ...
- 深入理解javascript构造函数和原型对象
---恢复内容开始--- 对象,是javascript中非常重要的一个梗,是否能透彻的理解它直接关系到你对整个javascript体系的基础理解,说白了,javascript就是一群对象在搅..(哔! ...
- javascript中的原型对象
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 简单理解Javascript中的call 和 apply
javascript中面向对像的能力是后来加进来的, 为了兼容性, 所以整出了很多奇特的东西, function Animal(){ this.name = "Animal"; t ...
- 理解JavaScript中的window对象
前言 每个JavaScript环境都有一个全局对象(global object).在全局范围内创建的任何变量实际上都是这个对象的属性,而任何函数都是它的方法.在浏览器环境中,全局对象是window对象 ...
- 彻底理解javascript 中的事件对象的pageY, clientY, screenY的区别和联系。
说到底, pageY, clientY, screenY的计算,就是要找到参考点, 它们的值就是: 鼠标点击的点----------- 和参考点指点----------的直角坐标系的距离 stacko ...
随机推荐
- MVC中使用jquery uploadify上传图片报302错误
使用jquery uploadify上传图片报302错误研究了半天,发现我上传的action中有根据session判断用户是否登录,如果没有登录就跳到登陆页,所以就出现了302跳转错误.原来更新了fl ...
- msql,触发器无事物回滚,插入之前满足条件再插入
很少写mysql的触发器和存储过程,由于需要需要做一个很小的判断,要用到触发器,要达到的效果就是,插入之前判断是否满足条件如果不满足就不插入 如果用sqlserver 或者orcale 就很简单,按s ...
- Immutable笔记
Immutable笔记 转换成js数据 获取或则改变嵌套式imutable数据类型
- Apache部署django项目
在此之前,我们一直使用django的manage.py 的runserver 命令来运行django应用,但这只是我们的开发环境,当项目真正部署上线的时候这做就不可行了,必须将我们的项目部署到特定的w ...
- windows编程环境
自行下载VS2010官方原版并破解你也可以从微软官方直接下载VS2010 正式版,然后自行破解.Microsoft Visual Studio 2010官方下载地址如下:页面:http://www.m ...
- centos 配置 ssl服务
使用的是appach 2.4.10 版本 各个版本配置不同 1.首先修改httpd.conf 文件 appach 安装目录下的 conf文件夹中找到 #LoadModule socache_shmcb ...
- Qt QObject
[1]Qt的QObject 1.测试代码如下: #include<QApplication> #include<QPushButton> #include<QDebug& ...
- java反射小例子
package com.txwsqk.reflect; public class Car { private String brand; private String color; private i ...
- java中递归的方法的实例
package com.demo.recursion; // 所谓递归,是指程序调用自身,当然,递归不会无休止地调用下去,它必然有一个出口,当满足条件时程序也就结束了,不然的话,那就是死循环了.// ...
- Eclipse创建maven项目
许久不创建maven web项目了,今天上手很是陌生,搜集资料后终于创建成功,跟大家也分享一下,同时也便于以后再次忘记使用... 新建maven项目(右击new,若不存在,可在other里面寻找)