js-Object.create

2019-07-28  本文已影响0人  isSunny

创建一个新对象:

1.new Object()
2.对象字面量创建:{}
3.Object.create();

从例子看区别吧

var obj1 = {
     a:1
}
var obj2 = new Object(obj1);

console.log(obj1.__proto__ ==Object.prototype);
console.log(obj2);
console.log(obj2.a);
console.log(obj2.__proto__ ==Object.prototype);
        
var obj3 = Object.create(obj1);
console.log(obj3);
console.log(obj3.__proto__);
console.log(obj3.a);
console.log(obj3.__proto__.prototype==obj1.prototype);
image.png

new Object() 通过构造函数来创建对象, 添加的属性是在自身实例下。
Object.create() es6创建对象的另一种方式,可以理解为继承一个对象, 添加的属性是在原型下。

创建空对象:

var obj4 = Object.create(null);
console.log(obj4);
var obj5 = {};
console.log(obj5);
image.png

当用构造函数或对象字面量方法创建空对象时,是有原型属性的,即有proto;
当用Object.create()方法创建空对象时,对象是没有原型属性的。所以如果在使用call、apply、bind,把null或者undefined作为this的绑定时候,可以用Object.create()。

给对象原型添加属性和方法

var foo = {
    name:'ldy',
    age:[1,2,3],
    say :function(){
        console.log(this.name);
    }
}
var f = Object.create(foo);

console.log(f)
console.log(f.__proto__.prototype ===foo.prototype)

function Foo(){}
Foo.prototype.name = "ldy"
Foo.prototype.age = [1,2,3,4]
Foo.prototype.say =function(){
        console.log(this.name);
    }
var f1 = new Foo();
console.log(f1)
console.log(f1.__proto__==Foo.prototype);
image.png

Object.create()的polyfill代码

function objectCreate(o){
    function F(){};
    F.prototype = o;
    return new F();
}

我们首先创建一个函数F,然后通过.prototype属性使其指向我们想要关联的对象。最后再使用new F()来构造一个新对象来关联。

上一篇 下一篇

猜你喜欢

热点阅读