开发者社区> 互联网fans> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Prototypes in Javascript 收集.__proto__

简介: It’s important to understand that a function’s prototype property has nothing to do with it’s actual prototype.   Javascript的每个对象均有一个原型(prototype)。
+关注继续查看

It’s important to understand that a function’s prototype property has nothing to do with it’s actual prototype.   微笑

Javascript的每个对象均有一个原型(prototype)。当消息(请求某个属性的指令)到达某个对象时,Javascript会尝试在该对象上寻找该属性,但没有的时候就会将消息转发到该对象的原型并在原型上寻找该属性,就是这样不断向上层原型转发消息,直到在某个原型中找到该属性或消息转发到顶层原型(Object对象)。(译者语:每个对象的原型均指向另一个对象,最顶层的原型就是Object类的实例)

原型继承链可以无限延长。但一般情况下过长的原型链会令人困惑且难以维护。

image

恩 js每个独享都有原型这个属性

You said every object has a prototype. But when I write ({}).prototype I get undefined. Are you crazy?

The true prototype of an object is held by the internal [[Prototype]] property.

一般情况下 Prototype 这个属性是对象内部私有属性

ec5 规定了访问这个属性的方式

Object.getPrototypeOf(object)

 

Object.getPrototypeOf({})

是可以获取到值的

image

还可以通过火狐等私有属性访问

({}).__proto__

image

可见是一致的

image

It’s important to understand that a function’s prototype property has nothing to do with it’s actual prototype.

//(example fails in IE)
var A = function(name) {
    this.name = name;
}
  
A.prototype == A.__proto__; //false
A.__proto__ == Function.prototype; //true - A's prototype is set to its constructor's prototype property
测试代码
<script>
    function A(name) {
        this.name = name;
    }
    console.log("prototype:"+  A.prototype ); //false
    console.log("prototype typeof:"+ typeof A.prototype ); //false
    console.log( "__proto__:"+ A.__proto__); //false
    console.log( "__proto__: typeof:"+ A.__proto__); //false
    console.log(  A.prototype == A.__proto__); //false
    console.log(  A.__proto__ == Function.prototype); //true - A's prototype is set to its constructor's prototype property
    console.log('====================')
    console.log( A.__proto__.__proto__==A.prototype.__proto__)
    console.log( A.__proto__.__proto__)
    console.log("A.__proto__.__proto__:"+typeof A.__proto__.__proto__)
    console.log( A.prototype.__proto__)
    console.log(" A.prototype.__proto__:"+typeof  A.prototype.__proto__)

</script>

通过实验数据可以看到 A真是原型.__proto__和 A里面的属性prototype没有直接关系

A..__proto__  和 Function.prototype 是一致的

也就是说 定义一个构造函数

function A(name) { this.name = name; }

A 的原型是Function.prototype

然后在  var myA=new A('mm')  用构造函数实例化一个对象

这个对象的原型就是 A.prototype

  console.log("myA.__proto__== A.prototype:"+(myA.__proto__== A.prototype))

也可以不通过构造函数构建对象 例如 可以直接根据 prototype属性创建对象

var myA2=Object.create(A.prototype);
console.log("myA2.__proto__== A.prototype:"+(myA2.__proto__== A.prototype))

所以原型 链 一定要NEW一次,否则就直接绕过去了

 

image

When a primitive is asked for it’s prototype it will be coerced to an object.

//(works in IE<=8 too, due to double-negative)

false.__proto__ === Boolean(false).__proto__; //true

js 里面最基本的5中数据类型 如果找他们的原型的话,会自动转换成 包装类 再找自己的原型

console.log( Object.getPrototypeOf(false))

Uncaught TypeError: Object.getPrototypeOf called on non-object

Object.getPrototypeOf 说明这个方法只能对对象使用

还有点东西

例如 function bb(){}

bb.prototype  根据BB创建对象的原型      

使用new操作符实例化对象的原型链

bb.__proto__ 创建bb函数的原型 (是 function )

bb.prototype.__proto__ 创建bb函数的原型 (是 function ) 的原型 (是 Object)

bb.prototype.__proto__ .__proto__   null

image

A instanceof B

A 为对象  B构造函数  B出现在A的圆形脸上

test

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
网站流量日志分析 —数据采集—页面埋点 JavaScript 收集数据|学习笔记
快速学习网站流量日志分析—数据采集—页面埋点 JavaScript 收集数据
0 0
程序猿福利:JavaScript 开源库集合网站 JSDB.io 收集分类了数百个最好的JavaScript库
JSDB.io是一个JavaScript库的集合网站,收集分类了数百个最好的JavaScript库,将Github中大部分JavaScript库都整理到了一个网站中,便于Web开发者查找使用,同时用户也可以主动提交未被收录的JS库。
0 0
Libscore – 收集 JavaScript 库的使用数据
  Libscore 扫描网络上成千上万的网站,收集统计 JavaScript 库的使用数据。在搜索框中,输入关键词,例如 jQuery, Modernizr, $.ui 或者 $.fn.fancybox。
464 0
JavaScript中的this陷阱的最全收集--没有之一
原文:JavaScript中的this陷阱的最全收集--没有之一   当有人问起你JavaScript有什么特点的时候,你可能立马就想到了单线程、事件驱动、面向对象等一堆词语,但是如果真的让你解释一下这些概念,可能真解释不清楚。
599 0
原生态纯JavaScript 100大技巧大收集---你值得拥有
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinahuyong/article/details/17708127 原生态...
694 0
javascript js string.Format()收集
方案1http://www.cnblogs.com/loogn/archive/2011/06/20/2085165.html String.prototype.format = function(args) { var result = this; if (arguments.
649 0
javascript技巧收集(200多个)---转
1.文本框焦点问题 onBlur:当失去输入焦点后产生该事件 onFocus:当输入获得焦点后,产生该文件 Onchange:当文字值改变时,产生该事件 Onselect:当文字加亮后,产生该文件 点击时文字消失,失去焦点时文字再出现 2.
1028 0
利用JavaScript实现二级联动
利用JavaScript实现二级联动 要实现JavaScript二级联动效果,首先要确定需要哪些技术: 二维数组 for in循环 new Option(text,value,true,true) add(option,null) onchange() 表单事件 HTML代码: <!-- <input type="text" id="text"> --> 请选择省份: <select name="" id="provinces"> <!-- <option value="江苏省">江苏省</option>
0 0
+关注
互联网fans
迷失在大前端海洋中的孩子
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Javascript中的函数
立即下载
Javascript异步编程
立即下载
JS零基础入门教程(上册)
立即下载