读书笔记

本文深入探讨了JavaScript中对象的创建方式,包括对象直接量、new操作符及Object.create方法,并详细解释了函数对象、普通对象的区别。通过实例演示了prototype、constructor和proto属性的使用,以及它们如何构成原型链。
摘要由CSDN通过智能技术生成

原型和原型链

创建对象的三种方式

1.对象直接量

var person = {name:孤影, age:19};

2.new一个对象

var person = new Person();

3.Object.create()

const person = Person.create({age: 19});

对象分类

1.函数对象

function F(){
console.log("定义一个构造函数");
};

2.普通对象

var obj = new Object();

普通对象可以由函数对象创造出来

function F(){
console.log("定义一个构造函数");
};

var f = new F();		//f是由函数对象F创造出来的普通对象

prototype


var obj = new Object();
console.log(obj.prototype);		//undefined

function fun(){
	console.log("定义一个构造函数");
};
console.log(fun.prototype);		//[object Object]

obj为普通对象,普通对象没有prototype,
每一个函数对象都有一个prototype属性。

constructor

function Foo(name){
	this.name = name;
};
var foo = new Foo("孤影");
console.log(Foo.prototype.constructor ===Foo);

constructor是原型对象上的属性,这个属性包含一个指向prototype属性所在的函数的指针。

proto

function fun(){
	console.log("孤影最可爱");
};
//"孤影最可爱"是一个字符串对象
console.log("孤影最可爱".__proto__ === Object.prototype);		//true
console.log(String.prototype.__proto__ === Object.prototype);		//true
console.log("孤影最可爱".__proto__.__proto__. === Object.prototype);		//true

Object.prototype.__proto__指向null,无中生有

console.log("Object.prototype.__proto__");		//null

原型链

原型对象prototype、构造函数constructor、原型指针 proto 三者之间的联系,形成了原型链

function Foo(){};
var foo = new Foo();
console.log(foo.__proto__ === Foo.prototype);
console.log(Foo.prototype.__proto__ === Object.prototype);
console.log(foo.__proto__.__proto__ === Object.prototype);
var obj = {};
console.log(obj.__proto__ === Object.prototype);	//true
var o = {};
var o1 = Object.create(o);
console.log(o1.__proto__ === o);
console.log(o.__proto__ == Object.prototype);
console.log(o1.__proto__.__proto__ === o.__proto__);
console.log(o1.__proto__.__proto__ === Object.prototype);

在这里插入图片描述

function 特例

var A = new Function();
var a = new A();

A.prototype是个函数对象,理论上他的__proto__应该指向Function.prototype,A又是由Function创建出来的,所以他就是自己,在js里强调万物皆对象,函数对象也是对象,给他认了个祖宗,指向Object.prototype。

console.log(a.__proto__===A.prototype);
console.log(Function.prototype.__proto__ === Object.prototype);
console.log(A.prototype.__proto__ == Object.prototype);
console.log(a.__proto__.__proto__ == Object.prototype);

三角关系

在这里插入图片描述

完整的原型链

在这里插入图片描述
摘自简书 陌上寒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值