Javascript的原型和原型链

Posted 淡紫色鍀薰衣草

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript的原型和原型链相关的知识,希望对你有一定的参考价值。

  • prototype :每个函数都会有这个属性,这里强调,是函数,普通对象是没有这个属性的(这里为什么说普通对象呢,因为JS里面,一切皆为对象,所以这里的普通对象不包括函数对象)。它是构造函数的原型对象;
  • __proto__ :每个对象都有这个属性,,这里强调,是对象,同样,因为函数也是对象,所以函数也有这个属性。它指向构造函数的原型对象;
  • constructor :这是原型对象上的一个指向构造函数的属性

创建对象的三种方式

  • 通过对象直接量    
    通过对象直接量创建对象,这是最简单也是最常用的创建对象的方式
    
    var empty = {};
    var pos = {x:12,y:23};
    var pos2 = {x:pos.x,y:pos.y+1};
    var author={
        "my name":"javascript",//属性名带空格,必须用引号包裹
        \'article-title\':"关于javascript的原型和原型链,看我就够了(一)",//属性名带连字符,必须用引号包裹
        "if":"使用保留字作为属性名,必须用引号包裹"//使用保留字作为属性名,必须用引号包裹
    }

     

  • 通过new创建对象  
    var  obj = new Object()//创建一个空对象等同于 var obj = {}
    var  arr = new Array()//创建一个空数组等同于 var arr = []
    上面的Object(),Array(),都是js内置的构造函数
    除了内置的构造函数,我们还可以使用自定义构造函数来初始化对象
    
    function fun(){
        console.log("这是一个自定义构造函数")
    };
    var myObj= new fun();

     

  • 通过Object.create()
    这个创建对象的方法似乎有些陌生,它创建一个新对象,包含两个参数,
    
    第一个,必需。 要用作原型的对象。 可以为 null
    第二个,可选。 包含一个或多个属性描述符的 JavaScript 对象
    
    
    const obj = Object.create({x:1})//obj 继承了属性x
    
    const obj2 = Object.create(Object.prototype, {
          foo: {
            writable: true,
            configurable: true,
            value: "hello"
          }
        })
        console.log(obj2);//输出{foo: "hello"}
    const obj3 = Object.create(null)//obj3不继承任何属性和方法

     

     

以上是关于Javascript的原型和原型链的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript原型&原型链

JavaScript原型和原型链(必考三座大三之一)

javascript原型,原型链 有啥特点

浅谈JavaScript原型链

web前端:理解js原型链

javaScript原型和原型链