自定义对象如何从Javascript对象继承

自定义对象如何从Javascript对象继承,javascript,Javascript,自定义创建的对象如何访问方法,如.toString() 方法,它是一个对象方法。自定义类如何链接到对象 条款规定 所有对象最终都会在其末尾具有对象构造函数 原型链。这意味着添加到 对象属性对所有对象自动可用 在前面的示例中,如果我们调用rufus.toString(),javascript 检查鲁弗斯物体,然后是猫物体,然后是宠物 对象宠物对象的原型是用该对象创建的 构造函数(使用对象文字快捷方式),以便javascript 然后在对象的原型上找到toString()方法 现在读完这篇文章后,我

自定义创建的对象如何访问方法,如
.toString()
方法,它是一个对象方法。自定义类如何链接到对象

条款规定

所有对象最终都会在其末尾具有对象构造函数 原型链。这意味着添加到 对象属性对所有对象自动可用

在前面的示例中,如果我们调用rufus.toString(),javascript 检查鲁弗斯物体,然后是猫物体,然后是宠物 对象宠物对象的原型是用该对象创建的 构造函数(使用对象文字快捷方式),以便javascript 然后在对象的原型上找到toString()方法

现在读完这篇文章后,我明白了为了从一个对象继承,我们必须在一个对象的函数构造函数原型中指定我们想要从中继承的对象。现在我读到prototype属性默认为空。那么一个对象怎么能有toString()属性呢?我不明白这句话

Pet对象的原型是用对象构造函数创建的 (使用对象文字快捷方式)

更新:

我读到构造函数的prototype属性默认为空。我读到我已经把引语贴在这里了

首先,每个JavaScript函数都有一个原型属性(如下所示) 属性为空),并且可以附加属性和方法 当您要实现继承时,请单击此原型属性


那么我们如何从javascript对象继承呢?

所有对象都通过原型继承继承
对象的属性。如果您这样做:

var b = {};
console.log(b.__proto__)
您可以看到从
对象继承的所有属性

因此,当您执行
b.toString()
时,它将在
b
上查找
toString()
函数,然后它将继续沿着原型链向上,最终到达具有此函数的
对象

编辑:

函数构造函数与对象:

为了澄清,函数构造函数定义如下:

var a = function() {
   this.b = "b";
   this.c = "c";
}
将其原型设置为
功能
。这可以通过执行
console.log(a)
来验证

但是,我们使用
a
创建如下新对象:

var d = new a();
这些对象的原型设置为
Object
,同样可以通过执行
console.log(d)
来验证


更多详细信息

所有对象都通过原型继承继承
对象的属性。如果您这样做:

var b = {};
console.log(b.__proto__)
您可以看到从
对象继承的所有属性

因此,当您执行
b.toString()
时,它将在
b
上查找
toString()
函数,然后它将继续沿着原型链向上,最终到达具有此函数的
对象

编辑:

函数构造函数与对象:

为了澄清,函数构造函数定义如下:

var a = function() {
   this.b = "b";
   this.c = "c";
}
将其原型设置为
功能
。这可以通过执行
console.log(a)
来验证

但是,我们使用
a
创建如下新对象:

var d = new a();
这些对象的原型设置为
Object
,同样可以通过执行
console.log(d)
来验证


更多详细信息参见最终指南:

所有由对象文本(即
{}
创建的对象都具有相同的原型对象,我们可以在JavaScript代码中将此原型对象称为
对象.prototype
)。使用
new
关键字和构造函数调用创建的对象将构造函数的
prototype
属性的值用作其原型。因此,由
newobject()
创建的对象继承自
object.prototype
,就像由
{}
创建的对象一样。类似地,由
new Array()
创建的对象使用
Array.prototype
作为其原型,而由
new Date()
创建的对象使用
Date.prototype
作为其原型

因此,使用
{}
文本创建的所有对象都将有
对象.prototype
作为其原型,并可以访问
对象.prototype
定义的方法,例如
toString()

new
操作符用于创建和初始化新对象。
new
关键字必须与函数调用一起使用。当函数调用与
new
关键字一起使用时,称为构造函数调用

使用
new
和函数调用创建的对象将继承构造函数的
prototype
属性。因此,使用
new Date()
创建的对象将从
Date.prototype
继承,使用
new Array()
创建的对象将从
Array.prototype
继承

您可以更改此
prototype
属性,使对象从您自己的自定义对象继承。比如说

function myFunction() {
    this.name = 'a';
    this.age = 20;
}

myFunction.prototype = {
    toString: function() {
        // you can override default toString() method here..
    },

    // you can define as many functions here as you want.
};

var myObj = new myFunction();
对象
myObj
将继承自
myFunction.prototype
,此对象中定义的所有方法将可用于
myObj

ECMAScript 5为创建对象定义了一个新方法
Object.create()
,该方法的原型不是
Object.prototype
。比如说

var prototypeObject = {a: 1, b: 2, c: 3};
var obj1 = Object.create(prototypeObject);

现在,
obj1'将从
prototypeObject'继承,而不是从
Object继承。prototype

引用JavaScript的最终指南:

所有由对象文本(即
{}
创建的对象都具有相同的原型对象,我们可以在JavaScript代码中将此原型对象称为
object.prototype