JavaScript 对象(Objects) 方法

Object.setPrototypeOf()方法将指定对象的原型(即内部 [[Prototype]] 属性)设置为另一个对象或 null。

所有 JavaScript 对象都从原型继承属性和方法。它通常被认为是设置对象原型的正确方法。

语法:

Object.setPrototypeOf(obj, prototype)

    参数:

    obj:要设置原型的对象。

    prototype:它是对象的新原型(一个对象或null)。

    返回值:

    此方法返回指定的对象。

    浏览器支持:

    chrome34
    edge是的
    firefox31
    opera是的

    示例1

    <script>
    let raay = {
      drive() {
        return 'Add raay';
      }
    }
    let naty  = {
      net() {
        return 'use net';
      }
    }
    // 设置
    Object.setPrototypeOf(naty, raay);
    
    console.dir(naty); //打印naty 对象
    console.log(naty.net()); // 调用 net 方法
    console.log(naty.drive()); // Add raay
    </script>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    输出:

    [object Object] {
    drive: drive() {
    return 'Add raay';
    },
    net: net() {
    return 'use net';
    }
    }
    "use net"
    "Add raay"

    示例 2

    <script>
     var Animal = {
       speak() {
         console.log(this.name + ' makes');
       }
    };
    
    class Dog {
      constructor(name) {
          this.name = name;
      }
    }
    
    Object.setPrototypeOf(Dog.prototypeAnimal); 
    // 如果你不这样做,当你调用speak时,你会得到一个TypeError
    var d = new Dog('people');
    d.speak();
    </script>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    输出:

    "people makes"

    示例3

    <script>
    let toyota = {
      drive() {
        return 'driving toyota';
     }
    }
    let camry = {
      wifi() {
        return 'carry';
      }
    }
    // 设置
    Object.setPrototypeOf(camry, toyota);
    console.dir(camry); //输出 camry 对象
    console.log(camry.wifi()); // carry
    </script> 
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    输出:

    [object Object] {
    drive: drive() {
    return 'driving toyota';
    },
    wifi: wifi() {
    return 'carry';
    }
    }
    "carry"