Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Object.create是否也创建自己的属性_Javascript_Inheritance - Fatal编程技术网

Javascript Object.create是否也创建自己的属性

Javascript Object.create是否也创建自己的属性,javascript,inheritance,Javascript,Inheritance,我知道你可以用这个函数设置一个新对象的原型() 但是,如果在像这样的对象文本中使用它,它还会创建自己的属性吗 return Object.create(this); 我还从Klass文本中知道这个方法,它只复制实例方法 var subclass = function() { }; subclass.prototype = parent.prototype; klass.prototype = new subclass; 我主要对object.create方法感兴趣 编辑 谢谢你,Richar

我知道你可以用这个函数设置一个新对象的原型() 但是,如果在像这样的对象文本中使用它,它还会创建自己的属性吗

return Object.create(this);
我还从Klass文本中知道这个方法,它只复制实例方法

var subclass = function() { };
subclass.prototype = parent.prototype;
klass.prototype = new subclass;
我主要对object.create方法感兴趣

编辑

谢谢你,Richard

总结

使用指定的原型对象和属性创建新对象

让我们看一个简单的例子,其中一个对象用
new
关键字实例化,另一个对象用
Object.create

function objectDotCreate() {
    this.property = "is defined";
    this.createMe = function () {
        return Object.create(this);
    };
}
var myTestObject = new objectDotCreate();
console.log(myTestObject, myTestObject.createMe());

现在来看一下控制台输出

左:
新建
右:
对象。创建

正如您所看到的,两者都创建了一个对象的新实例,并具有它们的属性

对象。创建

使用指定的原型对象和属性创建新对象

和新的
()

[…]创建用户定义的对象类型或具有构造函数的内置对象类型之一的实例

因此,使用
Object.create
创建的实例获得了对属性的访问权,因为它们被其
prototype
和使用
new
的实例所隐藏,具有自己的属性,由其构造函数定义

所以它不会创建自己的属性。(尽管您可以传递对象以直接定义对象属性描述符)

总结

使用指定的原型对象和属性创建新对象

让我们看一个简单的例子,其中一个对象用
new
关键字实例化,另一个对象用
Object.create

function objectDotCreate() {
    this.property = "is defined";
    this.createMe = function () {
        return Object.create(this);
    };
}
var myTestObject = new objectDotCreate();
console.log(myTestObject, myTestObject.createMe());

现在来看一下控制台输出

左:
新建
右:
对象。创建

正如您所看到的,两者都创建了一个对象的新实例,并具有它们的属性

对象。创建

使用指定的原型对象和属性创建新对象

和新的
()

[…]创建用户定义的对象类型或具有构造函数的内置对象类型之一的实例

因此,使用
Object.create
创建的实例获得了对属性的访问权,因为它们被其
prototype
和使用
new
的实例所隐藏,具有自己的属性,由其构造函数定义

所以它不会创建自己的属性。(尽管可以传递对象以直接定义对象属性描述符)

它是否也创建自己的属性

如果你读了,它会说“不”,除非你用第二个参数告诉它。它的基本用途是创建一个新的空对象,并将其内部原型设置为参数。第二个论点会像那样起作用

如果在这样的对象文本中使用

return Object.create(this);
返回对象。创建(此)

我在这里看不到任何对象文字,但由于不使用第二个参数,返回的对象将没有自己的属性

它是否也创建自己的属性

如果你读了,它会说“不”,除非你用第二个参数告诉它。它的基本用途是创建一个新的空对象,并将其内部原型设置为参数。第二个论点会像那样起作用

如果在这样的对象文本中使用

return Object.create(this);
返回对象。创建(此)


我在这里看不到任何对象文字,但由于不使用第二个参数,返回的对象将没有自己的属性。

“复制实例方法”-什么?那么
create
应该创建一个子类,而
inst
应该创建该类的实例?为什么类需要
init
方法?你的问题是什么,你想实现什么?“复制实例方法”-什么?那么
create
应该创建一个子类,而
inst
应该创建该类的实例?为什么类需要
init
方法?你的问题是什么,你想要实现什么?好的,我必须考虑这个,因为我正在制作原型继承。我有一个带有类属性的模型,当我用object.create(这个)对它进行子类化时,它将执行一个包含类函数的init函数。我回答了我的问题。有两个init函数,它执行类init。然后在您的示例firebug输出中,正确的站点获取所有对象属性并将其放入原型中,然后对象不应该有自己的属性,但在firebug中,我仍然可以看到指向不同版本的init函数的类属性/方法..然后它在类上下文中执行init函数..这很混乱,因为object.create(这)应该是一个没有自己的/class属性/方法的新对象..好,我必须考虑这一点,因为我正在制作原型继承。我有一个带有类属性的模型,当我用object.create(这个)对它进行子类化时,它将执行一个包含类函数的init函数。我回答了我的问题。有两个init函数,它执行类init。然后在您的示例firebug输出中,正确的站点获取所有对象属性并将其放入原型中,然后对象不应该有自己的属性,但在firebug中我仍然可以看到指向不同版本的init函数的类属性/方法..然后它在类上下文中执行init函数..这很混乱,因为object.create(这)应该是一个没有自己的/class属性/方法的新对象..谢谢,除非我粘贴整个类,否则这可能会让人困惑谢谢,除非我粘贴整个类,否则这可能会让人困惑