美文网首页
js-Object.create

js-Object.create

作者: isSunny | 来源:发表于2019-07-28 18:59 被阅读0次

创建一个新对象:

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()来构造一个新对象来关联。

相关文章

  • js-Object.create()

    Object.create() 是用来创建一个指定原型对象的对象。 语法 参数prototype:要用作原型的对象...

  • js-Object.create

    创建一个新对象: 1.new Object()2.对象字面量创建:{}3.Object.create(); 从例子...

网友评论

      本文标题:js-Object.create

      本文链接:https://www.haomeiwen.com/subject/dieprctx.html