JS基础丨 13. 原型及原型链

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CooliYellow/article/details/82941874

01. 构造函数

01. 构造函数
	01. 构造函数的创建
		01. 普通函数用new关键字创建
		02. new 构造函数:不占内存
		03. 构造函数即是类
		04. 写在构造函数中的属性为私有化
		05. 写在原型中的属性与方法为共有的
	
	02. 构造函数原型上的属性及方法:
		01. 字面量创建构造函数的原型属性及方法;
		02. 构造器指回自身: constructor: Person;
		03. 原型上的属性及方法被所有的实例化对象所共享;
	
	03. 原型的缺点:
		01. 所有的对象都是共享的,一个修改全局影响
		02. 不能像构造函数创建对象一样赋值: var person = new Person("jazz",20,"boy");

02. 原型: 是类(构造函数)自带的属性prototype

02. 原型: 是类(构造函数)自带的属性prototype
	任何一个函数都具备的属性
	该属性是有个指针,指向一个对象
	原型可以被任何一个构造函数共享其属性
	 
	作用:可以通过prototype属性给类添加自定义属性或者方法
	优点:原型创建的自定义属性和方法是共享的(节省内存),构造函数创建的属性和函数则是私有的;

03. prototype、protptype、__proto__

03. prototype、protptype、__proto__
 
	0.1 constructor: 原型对象prototype的属性 --> 指向当前原型的构造函数
		构造函数的.prototype.constructor === 构造函数
	 
	0.2 protptype: 构造函数的属性 --> 指向原型
		__proto__: 是实例对象的属性, 指向构造函数所指的原型
	 
		实例化对象.__proto_ === 构造函数.prototype
	
	
	0.3 使用字面量创建原型的问题:
		(构造函数.prototype.constructor === 构造函数)// false

04. 实例化对象与构造函数及其原型的关系

04. 实例化对象与构造函数及其原型的关系
	01. 构造函数.prototype.isPrototypeof(): 是原型对象的方法,可以判断此对象是否指向该原型
		01. 查找对象的属性:查找实例对象中,是否存在该属性,如果有就返回该属性的值
		02. 如果没有,查找原型对象中是否存在该属性!如果存在,则返回该属性的值
	
	02. 实例化对象上, 能够使用的属性方法:
		01. 构造函数的原型,添加自定义属性
		02. delete: 直接删除对象属性
		03. 先从构造函数中取值,未找到再从原型中取值
	
	03. 实例化对象上, 使用属性的来源:
		01. in: 判断某属性是否存在构造函数或者原型中
			console.log("name" in obj);// 存在为 true
		
		02. hasOwnProperty() 判断是否为实例对象的属性(不会去原型中找)
			
		
		03. 判断某属性是否仅存在原型中: (in方法判断)==true && (hasOwnProperty)==false
			function isInPrototype(obj, name){
				return (name in obj) && (!obj.hasOwnProperty(name))
			}
			console.log(isInPrototype(abox,"name"));// true

0.5 组合继承

0.5 组合继承
	组合继承: 原型链+借用构造函数(对象冒充)
	借用构造函数来(对象冒充),继承属性
	可以使用原型链来继承方法

0.6 Object对象的常用方法:

0.6 Object对象的常用方法:
	Object.hasOwnProperty( ) 检查属性是否为实例化对象的属性
	Object.isPrototypeOf( ) 一个对象是否是另一个对象的原型
	Object.propertyIsEnumerable( ) 是否可以通过for/in循环看到属性
	
	Object.toString( ) 定义一个对象的字符串表示
	Object.toLocaleString( ) 返回对象的本地字符串表示
	
	Object.valueOf( ) 指定对象的原始值

猜你喜欢

转载自blog.csdn.net/CooliYellow/article/details/82941874