文档章节

js __proto__ prototype constructor

小张525
 小张525
发布于 2016/12/09 09:34
字数 332
阅读 3
收藏 1
<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	
</body>
</html>

<script>
	function person(name){
		this.name  = name;
	}	

	person.prototype.getname = function(){
		return this.name;
	}

	var objectFactory = function(){
		var obj  = new Object();
		console.log(obj.__proto__);
		_construct = [].shift.call(arguments);

		//更改的是构造器的原型.  默认的是 function object / 更改后的指定的.	
		obj.__proto__ = _construct.prototype;
		var ret  = _construct.call(obj,arguments);

		return typeof ret  === 'object' ? ret  : obj;

	}

	var newObj  = objectFactory(person,"zhan");
	console.log(newObj.__proto__);
	//console.log(newObj.getname());
	// console.log(newObj);

	var a={name:'zhagn'};
	console.log(a);
	// 如果是这样的调整,那么a就变成一个函数对象,
	//a.__proto__  = person.__proto__;   // 这样赋值是错误的.
	// a.__proto__ = person.constructor;  // 这样赋值也是错误的,
	// 后改变原型对原始对象会有影响,不存在先后的问题.
	a.__proto__  = person.prototype;
	console.log(a);
	//console.log(a.getname());
	// new a;  //  a is not a constructor ,如果用new的方式, 必须有constructor属性,
	// a();    //  a is not a function, 也不可以调用, 
	// a.toString();  //Function.prototype.toString is not generic  
	//  a.name;   // 这个是可以正常使用的,
	/*
	*  关键的区别 :   __proto__ : 是一个函数,
	*                 construct : 是一个函数,
	*				  prototype : 是一个对象. 创建对象,主要依赖于此.	
	*				  字面量对象不可以 new 的关键原因是  该对象不具有constructor属性.	
	**/
	// 通过__proto__原型构造对象.
	//console.log(new a.__proto__.constructor('aaa'));
	var ar = new Array();
	var ob = new Object();
	console.log(ar.__proto__);   // 该__proto__中包括不同的方法.
	console.log(ob.__proto__);   // 

	console.log(ar.__proto__ != ob.__proto__,  ar.prototype == ob.prototype);

	console.log(a.prototype == newObj.prototype );
	console.log(a.__proto__ == newObj.__proto__);

</script>

 

© 著作权归作者所有

共有 人打赏支持
小张525
粉丝 6
博文 103
码字总数 33503
作品 0
乌鲁木齐
程序员
私信 提问
关于javascript的原型和原型链,看我就够了(三)

温故 我们先回顾一下前两天讨论的内容 创建对象的三种方式 通过对象直接量 通过new创建对象 通过Object.create() js中对象分为两种 函数对象 普通对象 原型对象prototype 每一个函数对象都有...

陌上寒
11/04
0
0
由Javascript的继承引发的:抽象类、接口、多态,甚至是类型转换!

工作中需要用到Javascript,关注了Javascript中继承复用的问题,翻阅了网上的各种关于Javascript继承的帖子,感觉大都思考略浅,并没有做过多说明,简单粗暴的告诉你实现Javascript继承有1.2...

xue777hua
2013/07/28
0
11
JavaScript中__proto__与prototype的关系

JavaScript中proto与prototype的关系 这里讨论下对象的内部原型(proto)和构造器的原型(prototype)的关系。 一、所有构造器/函数的proto都指向Function.prototype,它是一个空函数(Empty f...

泡不烂的凉粉
2013/05/21
0
0
js中的prototype和构造函数

js中没有类的感念,继承也是通过原型链来实现的对象的继承而不是类的继承 Vjeux写的这篇文章应该能帮助我们更好的理解js中原型的工作方式:http://blog.vjeux.com/2011/javascript/how-proto...

leo-H
2013/04/08
0
0
一图弄清JavaScript的继承与原型

其中Function、Object是JavaScript的内建类,JavaScript的类实际上是一个function 而function对象会凭空多出一个prototype属性 这就是一切困扰的起源 凡是function类型的对象,constructor都...

一个灰
11/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PHP生成CSV之内部换行

当我们使用PHP将采集到的文件内容保存到csv文件时,往往需要将采集内容进行二次过滤处理才能得到需要的内容。比如网页中的换行符,空格符等等。 对于空格等处理起来都比较简单,这里我们单独...

豆花饭烧土豆
43分钟前
1
0
使用 mjml 生成 thymeleaf 邮件框架模板

发邮件算是系统开发的一个基本需求了,不过搞邮件模板实在是件恶心事,估计搞过的同仁都有体会。 得支持多种客户端 支持响应式 疼彻心扉的 outlook 多数客户端只支持 inline 形式的 css 布局...

郁也风
46分钟前
4
0
让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字

让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字: 作者:孙冬梅;以前读韩国前总统朴槿惠的著作《绝望锻炼了我》时,里面有一句话令我印象深刻,她说“在我最困难的时期,...

原创小博客
今天
3
0
JAVA-四元数类

public class Quaternion { private final double x0, x1, x2, x3; // 四元数构造函数 public Quaternion(double x0, double x1, double x2, double x3) { this.x0 = ......

Pulsar-V
今天
17
0
Xshell利用Xftp传输文件,使用pure-ftpd搭建ftp服务

Xftp传输文件 如果已经通过Xshell登录到服务器,此时可以使用快捷键ctrl+alt+f 打开Xftp并展示Xshell当前的目录,之后直接拖拽传输文件即可。 pure-ftpd搭建ftp服务 pure-ftpd要比vsftp简单,...

野雪球
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部