JavaScript伪类模式

JavaScript Pseudoclasses Pattern

本文关键字:模式 JavaScript      更新时间:2023-09-26

嗨,我是JavaScript的新手,我正在研究对象创建模式,尤其是伪类模式,所以我写了几行代码来检查我是否得到了这个概念:

var Car = function (name, x, y) {
    this.name = name;
    this.x = x;
    this.y = y;
};
Car.prototype.drive = function (byX, byY) {
    this.x += byX;
    this.y += byY;
};
var ferrari = new Car("Ferrari", 5, 5);
ferrari.drive(5, 5);
var ferrari_proto = Object.getPrototypeOf(ferrari);
var ferrari_proto_proto = Object.getPrototypeOf(ferrari_proto);
var ferrari_proto_proto_null = Object.getPrototypeOf(ferrari_proto_proto);
console.log(ferrari_proto);                 // Should be Function
console.log(ferrari_proto_proto);           // Should be Object
console.log(ferrari_proto_proto_null);      // Should be Null

我从运行代码中得到的是:

{ drive: [Function] }
{ }
null

并记录我得到的这些对象的类型:

object
object
object

现在,我想的是,以这种方式创建对象,法拉利的原型将是汽车功能,所以我期望的是:

function    // Tha Car function
object      // The Function prototype, that is Object
object      // null, that is the end of the chain

有人可以解释我为什么得到这些输出,为什么我错了?!

法拉利的原型应该是汽车功能

不,您的ferrari的原型(它从中继承的对象)是Car.prototype——您将方法(如.drive)放在那里。Car构造函数与此不同。

在JavaScript函数中,数组也被视为对象。因此,日志可能正在返回基本类型。

这里有一个很好的资源来理解使用JavaScript原型。

http://yehudakatz.com/2011/08/12/understanding-prototypes-in-javascript/