2016-05-15 66 views
0

自定义创建的对象如何访问方法,如.toString() 方法是Object方法。如何连接到一个对象的自定义类自定义对象如何从Javascript继承对象

This文章指出

所有对象最终在它们 原型链末端的对象构造。这意味着添加到对象属性的任何方法或属性都可以自动用于所有对象。

在前面的示例中,如果我们调用rufus.toString(),则javascript 将检查rufus对象,然后检查Cat对象,然后检查Pet 对象。宠物对象的原型与对象 构造函数创建(使用对象字面快捷方式),这样的JavaScript将 然后找到toString()方法的对象的原型

现在通过文章看完之后我明白,为了从一个对象继承我们必须在对象的函数构造函数的原型中指定我们想要继承的对象。现在我读了默认情况下,prototype属性为空。那么对象如何具有toString()属性?我不明白

宠物对象的原型与对象构造 (使用对象字面快捷方式)创建的声明

更新:

我读到的原型属性构造函数默认为空。我读了here我已经贴在这里

首先报价,每一个JavaScript函数都有一个原型属性(这 属性默认为空),并且当您要附加的属性,并在此原型属性方法 实现继承。

我们如何继承javascript对象呢?

+0

*现在我读了默认情况下的原型属性是空的。*你在哪里读过的?请注意,对象的原型与原型属性(通常与构造函数关联)不是**相同。 – 2016-05-15 08:21:57

+0

@torazaburo你能解释一下吗?你能解释一个对象的原型和原型属性之间的区别吗?我以为我在混合他们.. –

+0

是的,我也认为你是。网上有比我在一个段落中更好的解释。搜索“原型和'__proto__'之间的区别”或类似的东西。 – 2016-05-15 13:21:56

回答

3

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

var b = {}; 
console.log(b.__proto__) 

你可以看到从Object继承的所有属性。

那么,什么情况是,当你做b.toString(),它会寻找toString()功能上b,那么它会持续上涨原型链,最终达到Object具有此功能。

编辑:

功能构造VS对象:

只是为了澄清,功能构造定义如下:

var a = function() { 
    this.b = "b"; 
    this.c = "c"; 
} 

有其原型设置为function。这可以通过做console.log(a)来验证。

但是,我们使用a创建新对象这样的:

var d = new a(); 

而且这些对象都有自己的原型设置为Object这又可以通过做console.log(d)验证。

更多细节here.

+0

我读到__proto__属性是对prototype属性的引用,默认情况下prototype属性是空的,除非明确指定。那么自定义对象如何能够隐式地从'Object'继承? –

+0

你是从哪里读的?有关详细理解,请参阅https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype –

+0

我更新了我的文章并回答了您的问题 –

0

从JavaScript参考权威指南:

通过对象文本创建的所有对象,即{}具有相同的原型对象,我们可以参考这个原型对象中的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

0

你问

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

从阅读您发布的内容看,您似乎已经超过了它。你明白了,那你ungot吧。在不包含任何代码的情况下回答问题。

在编程中,所有对象都从默认对象继承。把它想象成JavaScripts模板,它必须从某些东西开始,它具有基本属性和方法,并且基于它构建。每个对象都有不同的基本属性。 我在之前的文章中说过原型链在这里结束,但这并不完全准确,因为原型链以null结尾。