如何正确地原型JS子伪类
How to properly prototype JS sub-pseudoclasses?
制作子条款很容易。我只是遵循这个结构:
var Car = function(x){
this.x = x;
this.y = 10;
};
Car.prototype.say_position = function(){
console.log("("+this.x+", "+this.y+")");
}
var a = new Car(2);
a.say_position(); //(2, 10)
对类使用原型对性能有好处,因为每个实例都不重复该方法。为了制作子类,我遵循了这里解释的惯例:https://www.udacity.com/course/object-oriented-javascript--ud015如下所示:
var Car = function(x){
this.x = x;
this.y = 10;
};
var Van = function(x){
Car.apply(this, arguments);
};
Van.prototype = Object.create(Car);
Van.prototype.constructor = Car;
同时,当我尝试使用这种结构的原型方法时。。。
var Car = function(x){
this.x = x;
this.y = 10;
};
var Van = function(x){
Car.apply(this, arguments);
};
Van.prototype = Object.create(Car);
Van.prototype.constructor = Car;
Car.prototype.say_position = function(){
console.log("("+this.x+", "+this.y+")");
}
var car = new Car(2);
car.say_position(); //(2, 10)
var van = new Van(2);
van.say_position(); //Error!
正如您所看到的,当在van上调用say_position()
时,它会抛出一个错误。难道Van
的prototype
不应该委托给Car
的prototype
并在那里找到那个函数吗?有人能解释和解决这个问题吗?
您遇到的问题是Object.create
的参数应该是Car.prototype
这是工作代码
var Car = function(x){
this.x = x;
this.y = 10;
};
var Van = function(x){
Car.apply(this, arguments);
};
Van.prototype = Object.create(Car.prototype);
Van.prototype.constructor = Car;
Car.prototype.say_position = function(){
console.log("("+this.x+", "+this.y+")");
}
var car = new Car(2);
car.say_position(); //(2, 10)
var van = new Van(2);
van.say_position(); //(2, 10)
Mozilla文档对于这些类型的问题始终是一个很好的参考
相关文章:
- 如何在Mocha/Chai中测试JS原型(非模块)
- 如何从构造函数中调用js原型方法
- 当对象从服务器发送到客户端时,JS原型方法消失了
- JS原型无法设置属性'moveRight'的未定义
- 编写JS原型时,所有函数都应该使用原型对象
- js原型表创建
- JS原型:未捕获的类型错误未定义不是一个函数
- JS:原型模式兼容性
- JS原型 ─为什么是“未定义”
- JS原型是否可以访问初始化期间传递给对象的参数
- JS原型继承的意外结果
- 使用 JS 原型构建大型 JS 应用程序的性能优势
- JS原型,小混乱
- 节点.js原型继承
- JS.原型怪异行为中的属性
- 具有私有方法的JS原型类不访问属性
- JS原型类并非所有属性都可访问
- JS:原型-访问正确的实例属性
- node.js原型定义函数中可访问的私有变量
- node-js原型对象'self'var没有为回调存储正确的上下文