文档章节

js __proto__ prototype constructor

小张525
 小张525
发布于 2016/12/09 09:34
字数 332
阅读 3
收藏 1
点赞 0
评论 0
<!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
博文 59
码字总数 32032
作品 0
乌鲁木齐
程序员
JavaScript 原型及原型链简易理解

1.1 原型。 prototype: 每个函数对象都有自己的prototype属性,这个属性是一个指针,指向对象的原型对象,包含所有实例共享的属性和方法。 通过给原型添加属性和方法来可以给对象添加属性或...

piada ⋅ 05/18 ⋅ 0

用小猪佩奇说明Javascript的原型和原型链

  没错,我就是标题党!你已经成功被我骗进来了。来都来了,那就聊聊再走呗!接下来就听我一本正经地跟你说道说道。   Javascript的原型是这门语言的一个重点和难点。看过很多大佬写的解...

志如 ⋅ 05/10 ⋅ 0

JS原型与原型链终极详解_proto_、prototype及constructor

一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的。分为普通对象和函数对象,Object ,Function 是JS自带的函数对象。下面举例说明 function f1(){}; var f2 = functi...

黑魔法 ⋅ 04/24 ⋅ 0

JavaScript 原型模式

普通对象 除了函数对象就是普通对象 2. 函数对象 函数对象本质上都是通过new Function()创造的 JavaScript内置有12个构造器/对象Number、Boolean、String、Object、Function、Array、RegExp、...

张泽立 ⋅ 05/21 ⋅ 0

ES6对对象的拓展(2018-05-08)

对象的传统表示法 let person = { "name":"张三", "say":function(){ alert("你好吗?"); } } ES6中的简洁写法 var name = "Zhangsan"; var age = 12; //传统的属性写法 var person = { "na......

a小磊_ ⋅ 05/10 ⋅ 0

周大侠啊 进击的 JavaScript 之 原型链

原文链接:周大侠啊 进击的 JavaScript 之 原型链 算是记录一下自己的学习心得吧,哈哈 首先说一下,函数创建的相关知识 在JavaScript中,我们创建一个函数A(就是声明一个函数), 那么浏览器就...

周大侠啊 ⋅ 05/14 ⋅ 0

js笔记三十三之原型链模式基础

原型链模式 构造函数模式中拥有了类和实例的概念, 并且实例和实例之间是相互独立开的, -> 实例识别 基于构造函数模式的原型模式解决了 方法或者属性公有的问题 -> 把实例之间相同的属性和方法...

uplyw ⋅ 05/29 ⋅ 0

JavaScript 数据类型判断

1.1 JavaScript 数据类型 简单数据类型(基本数据类型): Undefined ; Null ; Boolean ; Number ; String ; Symbol(ES6新增) 复杂数据类型:Object,Object 本质上是由一组无序的名值对组成...

piada ⋅ 05/18 ⋅ 0

es6中class类的全方面理解(一)

传统的javascript中只有对象,没有类的概念。它是基于原型的面向对象语言。原型对象特点就是将自身的属性共享给新对象。这样的写法相对于其它传统面向对象语言来讲,很有一种独树一帜的感脚!...

张培跃 ⋅ 05/06 ⋅ 0

全面解析JavaScript的对象创建和继承

阿里巴巴前端工程师逸翾对JavaScript中的对象进行了详细讲解。首先从理解对象谈起,说明了对象中的两个关键点key和prototype,其次介绍了对创建对象的三种方式,包括字面量、构造函数、Objec...

云迹九州 ⋅ 04/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

【2018.0620学习笔记】【linux高级知识 13.4-13.6】

13.4 mysql用户管理 13.5 常用sql语句 13.6 mysql数据库备份恢复

lgsxp ⋅ 42分钟前 ⋅ 0

Java强弱引用示例

package jdk;import java.lang.ref.PhantomReference;import java.lang.ref.ReferenceQueue;import java.lang.ref.SoftReference;import java.lang.ref.WeakReference;public ......

月下狼 ⋅ 48分钟前 ⋅ 0

How I built a wind map with WebGL

Check out my WebGL-based wind power simulation demo! Let’s dive into how it works under the hood. I have an unflattering confession to make: for the last few years working at M......

voole ⋅ 51分钟前 ⋅ 0

Spring Cloud Finchley 正式发布,包含 4 个重大更新!

在 Spring 的官方博客上已经看到 Spring Cloud Finchley 在 06 月 19 日这一天正式发布了,我们在 Maven 中央仓库也看到了最新版的更新。 Finchley 正式版的发布貌似经历了相当长的时间,果然...

Java技术栈 ⋅ 51分钟前 ⋅ 0

QT5交叉编译

configure配置 ./configure -release -opensource -prefix <path> -no-largefile -no-pkg-config -no-qml-debug -xplatform <target> -qt-libpng -qt-zlib -qt-libjpeg -qt-freetype -qt-sq......

水海云 ⋅ 55分钟前 ⋅ 0

Linux环境下安装sshd服务

SSH 协议:安全外壳协议。为 Secure Shell 的缩写。SSH 为建立在应用层和传输层基础上的安全协议。 sshd服务使用SSH协议可以用来进行远程控制, 或在计算机之间传送文件 安装 yum -y install...

晨猫 ⋅ 59分钟前 ⋅ 0

ubuntu国内镜像站点及更新源

1: http://mirrors.163.com/ 2: https://www.oschina.net/p/ubuntu 3: Ubuntu 几个国内更新源 如何更改源 可以在软件更新中选择源 使用如下命令更改(修改前先备份): sudo vim /etc/apt/sour...

whoisliang ⋅ 今天 ⋅ 0

java实现沙箱测试环境支付宝支付(demo)和整合微信支付和支付宝支付到SSM环境全过程(附源码)

文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源。 一、支付宝测试环境代码测试 1.下载电脑网站的官方demo: 下载地址:https://d...

公众号_好好学java ⋅ 今天 ⋅ 1

如何 3D 打印一个密码锁

简评:这篇文章介绍怎么用 3D 打印机做一个密码锁,巧妙地利用机械结构的变化实现锁的功能,相当有趣! 3D 打印机非常适合打印静态物体。如果你够聪明,还可以打印出功能物件。如果你特别特别...

极光推送 ⋅ 今天 ⋅ 0

Day 17 vim简介与一般模式介绍

vim简介 vi和Vim的最大区别就是编辑一个文件时vi不会显示颜色,而Vim会显示颜色。显示颜色更便于用户编辑,凄然功能没有太大的区别 使用 yum install -y vim-enhanced 安装 vim的三种常用模式...

杉下 ⋅ 今天 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部