原型 prototype __proto__

原型

概念:每一个构造函数天生自带一个属性为 prototype 对象,是一个对象数据类型,里面可以存放对应的数据 称为显示原型 且唯一

一般把方法放在原型里,属性放在构造函数里

当自定义构造函数书写完毕后,就会有 prototype 产生

概念:每一个对象天生自带一个__proto__属性,也是一个对象空间,指向对象所属构造函数的prototype,称为隐式原型

复制代码
function Person()
{
    Person.prototype.a = 100;
    Person.prototype.say = function(){
    console.log("hello");
    }
}
​
var p1 = new Person();
​
//person找不到a,则会去构造函数的prototype里找
console.log(p1.a);  //100
p1.say(); // hello
​
console.log(Person.prototype);
//判断一个对象是否指向了该构造函数的原型对象
console.log(Person.prototype.isPrototypeOf(p1));// true
//创建的对象的自带属性__proto__ 指向构造函数的 prototype对象
console.log(p1.__proto__);
​
//指向的意思就是说是同一个东西
console.log(p1.__proto__ == Person.prototype); //true
console.log(p1.__proto__ === Person.prototype); //true
复制代码

总结

  • 实例对象的__proto__是指向对应构造函数的prototype

  • 在实际使用中,一般不会使用 __proto__,而是通过 __proto__访问对应的prototype

问题1:实例对象的 __proto__ 指向谁?

  => 指向所属构造函数的 prototype

  => p1 所属的构造函数是 Person

  => p1.__proto__ 指向 Person.prototype

问题2:(构造函数)Person.prototype 的 __proto__ 指向谁?

  => Person.prototype 是一个对象数据类型( Object )

  => 在 JS 内所有的 object 数据类型都是属于 Object 这个内置构造函数的

  => 所以 Person.prototype 属于 Object 这个内置构造函数

  => 所以 Person.prototype 的 __proto__ 指向 Object.prototype

问题3:(构造函数)Person 的 __proto__ 指向谁?

  => Person 是一个函数,函数本身也是一个对象,所以也有 __proto__

  => 如果Person 有父类,则指向父类的原型prototype

  => 在 JS 内,所有函数都是属于内置构造函数 Function 的实例

  => 所以 Person.__proto__ 指向 Function.prototype

问题4:Object.prototype 的 __proto__ 指向谁?

  => Object.prototype 是一个对象数据类型,只要是对象,都是属于 Object 这个内置构造函数的

  => 注意:Object.prototype 在 JS 内叫做顶级原型,不在有 __proto`__`,指向null

问题5:Object 的 __proto__ 指向谁?

  => Object 是一个内置构造函数,也是一个函数,也是一个对象

  => 在 JS 内,所有的函数都是属于内置构造函数 Function 的实例

  => Object 也是 Function 的实例

  => 所以Object.__proto__ 指向 Function.prototype

问题6:Function.prototype 的 __proto__ 指向谁?

  => Function.prototype 也是一个对象数据类型

  => 只要是对象数据类型都是 Object 的实例

  => 所以 Function.prototype 的 __proto__ 指向 Object.prototype

问题7:Function 的 __proto__ 指向谁?

  => Function 也是一个内置构造函数,也是一个函数

  => 在 JS 内,所有的函数都是属于内置构造函数 Function 的实例

  => Function 是 自己的构造函数,自己的实例对象

  => 所以 Function 所属的构造函数时Function

  => 所以 Function.__proto__ 指向 Function.prototype

posted @   啊呀阿鱼呀  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示