原型对象prototype和原型属性[[Prototype]]

构造器:可以被 new 运算符调用, Boolean,Number,String,Date,RegExp,Error,Function,Array,Object 都是构造器,他们有各自的实现方式。

比如:var s=new String("test")

s的 [[Prototype]] 内部属性设定为标准内置的字符串原型对象,它是 String.prototype 的初始值。
s的 [[Class]] 内部属性设定为 "String"。
s的 [[Extensible]] 内部属性设定为 true。
s的 [[PrimitiveValue]] 内部属性设定为 ToString("test")。

除这些内置全局对象的构造器之外,还有创建的函数对象也可以用new运算符调用,因为在创建函数对象的过程中,设定了其内部属性[[Construct]],同时给它设置一个原型对象,这个原型对象和new Object创建的对象一样。

这里说明下函数对象的[[call]] ,[[Construct]],
var f=function(a,b,c){}
f()调用[[call]]内部属性方法,建立执行环境,返回返回值。
var ff=new f()调用[[Construct]]内部方法,创建一个空对象,并对其设置内部属性和方法,比如[[Prototype]]属性指向f的prototype。并以该对象为 this 值,调用参数列表,调用f的 [[Call]] 内部属性,如果返回一个对象则返回该对象,否则返回此前创立的空对象。

所以每个构造器有一个原型对象prototype。

每个对象都有一个内部属性[[Prototype]],它指向自己的构造函数的原型对象,同理,其构造函数的原型对象也有有一个内部属性[[Prototype]]指向自己的原型对象,这就形成原型链。当然这个原型链不是无穷的,Object的原型对象的[[Prototype]]是null。
拿Array为例:
Array的原型是数组原型对象,Array构造器的[[Prototype]]是函数原型对象。
当var arr=new Array()时,
arr的内部属性[[Prototype]]指向Array.prototype。

下面就来验证下:

var a=Array.call(this,2)
结果a是长度为2的空数组。其中call方法就继承自 Function.prototype

arr.push(1);
push继承自 Array.prototype

console.log(arr.prototype) //结果为 undefined,可见其没有原型对象了。
var arrNew=new arr() //TypeError: object is not a function 因为没有内部属性[[Construct]],抛出异常

再看
例2:
var f=function(){}
console.log(f.prototype) //Object {}
var ff=new f() //{}对象

转载于:https://www.cnblogs.com/mufc-go/p/3544852.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(转) PowerDesigner中Table视图同时显示Code和Name

PowerDesigner中Table视图同时显示Code和Name,像下图这样的效果: 实现方法:Tools-Display Preference 转载于:https://www.cnblogs.com/wallis0922/p/3548402.html

Linux下部署Hadoop伪分布模式

Hadoop版本为1.2.1 Distribution为Fedora19并使用hadoop账号安装 第一步:配置ssh本地登录证书(虽然为伪分布模式,Hadoop依然会使用SSH进行通信) [hadooppromote ~]$ which ssh /usr/bin/ssh [hadooppromote ~]$ which ssh-keygen …

Fedora-19安装texlive2013并配置中文

参考博文: http://blog.csdn.net/longerzone/article/details/8129124 之前通过yum install安装了texlive,不过在使用过程中老是报错,后来通过下载完整iso安装成功,并成功配置了中文(真是一个折腾啊) 现将…

【Java】RuleSource约束常用方法整理

1-常用约束规则RuleSource的设置方法例如:addRules(new Rules(ProgramFeeItem.class){protected void initRules() {add("rateClass", all(new Constraint[] { required() })); //required表示,不可为空add("remark", rules.maxLen…

C语言编程基础 打印图形

C语言中用循环可以打印出各种图形1 直角三角形(靠右直立)&#xff1a;部分代码int i,j;for (i0; i<6; i) {for (j6;j>i ;j-- ) {printf("");}for (j0; j<i; j) {printf("*");}printf("\n");}2.等腰三角形&#xff08;直立&#xff09;部…

PHP的ISAPI和FastCGI比较

1、CGI&#xff08;通用网关接口/Common Gateway Interface&#xff09;一般是可执行程序&#xff0c;例如EXE文件&#xff0c;和WEB服务器各自占据着不同的进程,而且一般一个CGI程序只能处理一个用户请求。这样&#xff0c;当用 户请求数量非常多时&#xff0c;会大量占用系统…

辨析*P++,*(p++),*(++p),++(*p),*(P--),*(--P)

1&#xff0c;*p由于和*同等优先级&#xff0c;结合方向为自右向左&#xff0c;因此它等价与*&#xff08;p&#xff09;。先引用p的值&#xff0c;实现*p的运算&#xff0c;然后再使p自增1。注意 其中为什么是先执行*p然后再执行*p&#xff0c;不应该是先执行括号里的p再执行*…

chrome密码管理

chrome://settings/passwords ------------------------------- [系统盘]:\Documents and Settings\[用户名]\Local Settings\Application Data\Google\Chrome\User Data\Default\Login Data &#xff08;这个路径是 Win XP 系统&#xff09; 你可以用 SQLite Database Browse…

牛客网刷题错题记录

目录 Java 1.静态内部类 2.关于String&#xff0c;StringBuilder以及StringBuffer 3.java语言特性 4.非抽象类实现接口的问题 5.互斥锁 6. Socket 通信编程 7.类的初始化顺序 8.变量的存储区 9.jvm线程共享问题 10.java内存回收问题 11.关于java concurrent包四个类…

android Intent和IntentFilter

android的应用程序包含三种重要的组件&#xff1a;Activity、Service、BroadcastReceiver&#xff0c;应用程序采用一致的方式来启动他们——都是依靠Intent来进行启动。Intent就封装了程序想要启动的程序意图&#xff0c;不仅如此&#xff0c;Intent还可用于与被启动组件交换信…

冒泡排序的双重循环理解

主要说一下冒泡排序的一些关键地方的个人理解&#xff0c;比如算法思想&#xff0c;两个循环的作用意义&#xff0c;中间循环变量范围的确定等。 原理&#xff1a;比较两个相邻的元素&#xff0c;将值大的元素交换至右端。思路&#xff1a;依次比较相邻的两个数&#xff0c;将小…

全程软件测试之测试需求分析与计划(2)

2.3 测试工作量估算 在确定了测试需求、明确了测试范围之后&#xff0c;就需要明确测试任务&#xff0c;估算测试工作量。基于质量需求和测试的工作量、测试环境、产品发布的设想时间等要求&#xff0c;就可以确定测试进度和所需的测试资源&#xff0c;或者基于现有的测试资源…

C语言和Java 在用数组作为参数时有点不一样

C语言和Java 在用数组作为参数时有点不一样。 C中 void jh(int n[2]) {/注意这里参数是写了大小 int temp; temp n[0]; n[0] n[1]; n[1] temp; } int main() { int i; int num[2] {7, 8}; jh(num); } Java中 由于C和Java中定义数组形式稍微有点不一样&#xff0c;所以这里…

[CLR via C#]16. 数组

数组是允许将多个数据项当作一个集合来处理的机制。CLR支持一维数组、多维数组和交错数据(即由数组构成的数组)。所有数组类型都隐式地从System.Array抽象类派生&#xff0c;后者又派生自System.Object。这意味着数组始终是引用类型&#xff0c;是在托管堆上分配的。在你应用程…

Java中String类 compareTo()方法比较字符串详解

中心&#xff1a;String 是字符串,它的比较用compareTo方法,它从第一位开始比较, 如果遇到不同的字符,则马上返回这两个字符的ascii值差值.返回值是int类型1.当两个比较的字符串是英文且长度不等时&#xff0c;1&#xff09;长度短的与长度长的字符一样&#xff0c;则返回的结果…

UIPopoverController简介

1, performSegueWithIdentifier:sender&#xff1a;跳转或弹出控制器 Identifier为popoverSegue时候&#xff0c;Sender仅限于UIBarbuttonItem与View&#xff1b;//。。。。。。。。。 转载于:https://www.cnblogs.com/senlinwuran/p/UIPopoverController.html

异常是catch还是throws的简单原则

1 .如果你完全能处理这个异常&#xff0c;那么就catch掉 public void test() {try {} catch (Exception e) {}}2. 如果你完全不能处理这个异常&#xff0c;那么就throws掉 public void test() throws Exception {}3. 如果你想对异常做一点点处理&#xff0c;但又不能完全处理&a…

在Windows 7 x64 上编译libsvn

这几天由于工作需要&#xff0c;需要Windows上Python 2.7 x64对应的svn模块。Win32版本可以从这个页面直接下载 http://sourceforge.net/projects/win32svnx64的无奈只有自己编译了。在这个过程中还是费了一些力气&#xff0c;在Linux上可以直接make&#xff0c;在Windows使用V…

程序员简历怎么写

说到程序员简历&#xff0c;这两个月&#xff0c;我看过不下10,000份简历。。。 答主不是HR&#xff0c;也不是技术负责人&#xff0c;但是在网站的运营工作中&#xff0c;每天最开心的事情就是研究候选人的简历了~~ 这些人中&#xff0c;有BAT的资深大牛程序员&#xff0c;也有…

android之修改CheckBox左侧图标样式

很多时候系统自带的CheckBox样式并不能满足我们的需求&#xff0c;本文讲解如何替换CheckBox选中&#xff0c;未选中状态下的左侧图片背景的替换。 1.在res目录下创建drawable文件夹&#xff0c;在drawable创建my_checkbox.xml文件 my_checkbox.xml文件内容如下&#xff1a; &l…