自定义对象如何从Javascript对象

时间:2016-05-15 08:15:54

标签: javascript

自定义创建的对象如何访问.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对象?

3 个答案:

答案 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结尾。