文档章节

js __proto__ prototype constructor

小张525
 小张525
发布于 2016/12/09 09:34
字数 332
阅读 11
收藏 1

码上生花,ECharts 作品展示赛正式启动!>>>

<!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
博文 135
码字总数 44612
作品 0
乌鲁木齐
程序员
私信 提问
加载中
请先登录后再评论。
关于javascript的原型和原型链,看我就够了(三)

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

陌上寒
2018/11/04
0
0
Jascript原型链以及Object和Function之间的关系

先看一个简单的function变量 function fun1(name) {this.name = name;} console.log("fun1", fun1) 从结果可以看到定义一个function,它里边所含有的内容这六个属性是每个function所必有的,...

osc_pqzfxki9
2019/02/26
4
0
原型 、原型链和对象是怎么实现继承的

什么是原型?   声明函数时 js会自动在你声明的函数对象(js一切皆对象)上挂载一些方法和属性 其中prototype属性就是 原型(也称为原型对象) 如下图: 这个原型对象里面保存着 construc...

osc_wfzj799x
2019/05/30
2
0
javascript 之原型、原型链-14

原型 原型是一个对象,每个函数对象(在javascript 之对象中说过函数也是对象 )都有一个属性(prototype)指向这个对象--原型对象,这个对象的作用是让所有对象实例共享原型对象中的属性、方...

osc_cjaxjtx8
2018/01/23
1
0
由Javascript的继承引发的:抽象类、接口、多态,甚至是类型转换!

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

xue777hua
2013/07/28
2.9K
11

没有更多内容

加载失败,请刷新页面

加载更多

idea 启动命令行的时候提示不能创建PTY

问题描述: 昨天上午,凯哥还在好好的使用idea,中午的时候,360扫描,好像要升级还是要干嘛的,没细看,然后凯哥就点击确定。结果到下午使用idea的Terminal 命令行的时候提示,如下图错误: ...

中凯_凯哥java
58分钟前
24
0
常用计数技巧和方法(理论篇)

常用计数技巧和方法(理论篇) 文章较长且大量使用 \(\LaTeX\) 导致渲染较慢,因此分为两个部分 由于组合方面的知识非常的繁细,容易忘记,使用时不够熟练,这里总结一下 以下内容有所借鉴百...

osc_tq5hz9vv
59分钟前
18
0
WinForm 工作流设计 1

从事软件行业那么多年,一直很少写博。很多技术,长时间不用都慢慢淡忘。 把自己学到的用笔记下来,可以巩固和发现不足,也可以把自己对技术的一些 理解,分享出来供大家批评指正。 废话不多...

osc_4p2c0ecc
今天
21
0
vnc中文版客户端,vnc中文版客户端下载,使用教程。

vnc客户端简介 iis7远程桌面管理软件,是一款绿色小巧,功能实用的vnc客户端软件,其界面简洁,操作方便,可以同时远程查看多台主机,并且支持多台服务器间的来回切换,支持分屏,群控操作。...

知殴粥
今天
18
0
K-Means聚类算法原理

    K-Means算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛。K-Means算法有大量的变体,本文就从最传统的K-Means算法讲起,在其基础上讲述K-Means的优化变...

osc_u20gxst6
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部