JavaScript 之 原型链 的理解

一、Prototype原型 | 原型对象

        1.Prototype是  [函数] 的 一个属性

        2.Prototype是个对象 (可理解为可以包含变量的变量叫对象),包含应该由特定引用类型的实例共享的属性和方法。

        3.当我们创建函数的时候会默认添加Prototype属性,在上面定义的方法可以被对象实例共享。

function demo() { }
//或 
// let demo = function(){}
demo.prototype.name = 'lihua';
demo.prototype.name = 'lihua';
demo.prototype.age = 18;
demo.prototype.sayName = function () {
    console.log(this.name);
};
let demo1 = new demo();
demo1.sayName();    //lihua

let demo2 = new demo();
demo2.sayName();    //lihua

console.log(demo1.sayName == demo2.sayName);    //true   

二、  __proto__  隐式原型

        1.[对象] 的属性

        2.指向构造函数的prototype

        3.obj.__proto__ === test.prototype

三、代码实例

 function test(name) {
            this.name = name;
            this.a = 1
        }
        test.prototype.b = 2;
        const obj = new test('xiaoming');
        console.dir(test.prototype);    //Object
        console.dir(obj.__proto__);    //Object
        console.log(obj.__proto__ === test.prototype); //true
        console.log(Object.prototype.__proto__);    //null
        console.dir(test.prototype.__proto__ === Object.prototype);
        console.log(obj.b);     //可以顺着原型链找到b

obj的__proto__指的是其构造函数test的prototype 

四、原型链结构

obj{
   a:1,
   __proto__:test.prototype = {
       b:2,
       __proto__:Object.prototype = {
           __proto__:null
       }
   }
}

五、原型链顶层是Object.prototype

 Object.prototype.__proto__ 是null

`Object.prototype` 是JavaScript中所有普通对象的原型,它包含了一系列方法和属性,这些方法和属性会被所有对象实例所继承。以下是`Object.prototype`中的一些核心方法:

1. **toString**:当对象被转换为字符串时调用,通常返回"[object Object]"。
2. **valueOf**:返回对象的原始值。
3. **hasOwnProperty**:检查对象自身是否具有指定的属性(不包含原型链上的属性)。
4. **isPrototypeOf**:检查该对象是否在指定对象的原型链上。
5. **propertyIsEnumerable**:检查指定属性是否可枚举。
6. **toLocaleString**:返回对象的本地化字符串表示。
7. **constructor**:指回对象的构造函数。

除了上述方法,还有一些其他有用的方法,如`keys`、`getOwnPropertyDescriptor`、`getPrototypeOf`等。这些方法为操作对象提供了强大的能力,比如迭代对象的属性、获取和设置属性的描述符、以及获取对象的原型。

总的来说,`Object.prototype`提供的方法为JavaScript的对象系统提供了丰富的操作手段,使得对象的行为可以更加灵活地被定制和扩展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值