我刚刚开始在javascript中学习原型,我无法理解代码中的问题。对不起,我的问题可能看起来很愚蠢
我收到这样的错误:
Uncaught TypeError: undefined is not a function
为什么未定义?我继承了用户的一个功能。 无法理解:(
var user = {
sayName: function() {
console.log(this.name)
}
};
user.name = "viktor";
user.sayName();
var user2 = {};
user2.prototype = user;
user2.name = "segey";
user2.sayName();
答案 0 :(得分:2)
您需要使用普通对象设置原型链:
var user2 = Object.create(user); // set `user` as prototype of `user2`
user2.name = "segey";
user2.sayName();
答案 1 :(得分:1)
对于你的问题,正确的解决方案将是:
function User() {
this.name = 'Viktor';
return this;
}
User.prototype = Object.create({
sayName: function() {
return this.name;
}
});
function User2() {}
User2.prototype = Object.create(User.prototype);
var user = new User();
user.sayName(); // 'Viktor'
user2 = new User2();
user2.name = 'Bogdan';
user2.sayName(); // 'Bogdan'
详细解释与例子。
假设我们有一些基本的课程Animal
。我们的动物有age
和name
。
function Animal() {
this.age = 5;
this.name = "Stuffy";
return this;
}
Animal.prototype = Object.create({
getAge: function() {
return this.age;
},
getName: function() {
return this.name;
}
});
当我花了一些时间在建筑上时,我明白我也需要SubClass of Animal。例如,让它为Dog
类,具有新的属性和函数。此外,Dog
必须扩展Animal
类的函数和属性。
function Dog() {
Animal.apply(this, arguments); // Call parent constructor
this.wantsEat = true; // Add new properties
return this;
}
Dog.prototype = Object.create(Animal.prototype); // Create object with Animal prototype
Object.extend(Dog.prototype, { // Any extend() function, wish you want
constructor: Dog, // Restore constructor for Dog class
eat: function() {
this.wantsEat = false;
return this;
}
});
或者你可以使用Object.defineProperties()
并以这种方式扩展:
Dog.prototype = Object.create(Animal.prototype, {
constructor: {
value: Dog
},
eat: {
value: function() {
this.wantsEat = false;
return this;
}
}
});