自定义创建的对象如何访问.toString()
等方法
方法是一种Object方法。如何将自定义类链接到Object
This条款声明
所有对象最终都在其末尾具有Object构造函数 原型链。这意味着添加到的任何方法或属性 对象属性可自动用于所有对象。
在前面的例子中,如果我们调用rufus.toString(),javascript 会检查rufus对象,然后是Cat对象,然后是Pet 宾语。 Pet对象的原型是使用Object创建的 构造函数(使用对象文字快捷方式)所以javascript会 然后在Object的原型上找到toString()方法
现在阅读完文章后我明白为了从对象继承,我们必须在对象的函数构造函数的原型中指定我们想要继承的对象。现在我读到默认情况下,prototype属性为空。那么一个对象如何具有属性toString()?我不明白这句话
Pet对象的原型是使用Object构造函数创建的 (使用对象文字快捷方式)
更新
我读到默认情况下构造函数的prototype属性为空。我读到了here我在这里粘贴了引用
首先,每个JavaScript函数都有一个prototype属性(这个 默认情况下,属性为空),并附加属性和方法 当你想实现继承时,在这个prototype属性上。
我们如何继承javascript对象?
答案 0 :(得分:3)
所有对象都通过原型继承继承Object
的属性。如果你这样做:
var b = {};
console.log(b.__proto__)
您可以看到从Object
继承的所有属性。
所以,当你执行b.toString()
时,会在toString()
上查找b
函数,然后它会继续上升到原型链并最终到达{{} 1}}具有此功能。
修改强>
函数构造函数与对象:
只是为了澄清,一个函数构造函数定义如下:
Object
将其原型设置为var a = function() {
this.b = "b";
this.c = "c";
}
。这可以通过function
来验证。
但是,我们使用console.log(a)
创建新的对象,如下所示:
a
这些对象的原型设置为var d = new a();
,再次可以通过Object
进行验证。
更多详情here.
答案 1 :(得分:0)
引用JavaScript The Definitive Guide:
由对象文字创建的所有对象,即
{}
具有相同的原型对象,我们可以在JavaScript代码中将此原型对象称为Object.prototype
。使用new
关键字创建的对象和构造函数调用使用构造函数的prototype
属性值作为其原型。因此,new Object()
创建的对象继承自Object.prototype
,就像{}
创建的对象一样。同样,new Array()
创建的对象使用Array.prototype
作为原型,new Date()
创建的对象使用Date.prototype
作为原型。
因此,使用{}
文字创建的所有对象都将Object.prototype
作为原型,并且可以访问由Object.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
使用。
EcmaScript5定义了一种新方法Object.create()
,用于创建具有Object.prototype
以外原型的对象。例如
var prototypeObject = {a: 1, b: 2, c: 3};
var obj1 = Object.create(prototypeObject);
现在obj1' will inherit from
prototypeObject'而不是来自Object.prototype
答案 2 :(得分:0)
你问了
自定义创建的对象如何访问诸如的方法 .toString()方法,它是一个Object方法。如何定制课程 链接到对象
通过阅读你发布的内容,你似乎已经超过了它。你得到了它,然后你 ungot 它。在不包含任何代码的情况下回答问题。
在编程中,所有对象都从默认对象继承。将其视为 JavaScripts模板,它必须从某些东西开始,它具有基本属性和方法,您可以在此基础上构建。每个对象都有不同的基本属性。 我在之前的帖子中说过原型链在这里结束,但这并不完全准确,因为原型链以null结尾。