Javascript 如构造函数中所示
具有以下代码:Javascript 如构造函数中所示,javascript,Javascript,具有以下代码: function AdminUser(firstName, surName) { User.call(this, firstName, surName); this.edit = function() { alert('test password'); } } function User(firstName, surName) { this.firstName = firstName; this.surName = su
function AdminUser(firstName, surName) {
User.call(this, firstName, surName);
this.edit = function() {
alert('test password');
}
}
function User(firstName, surName) {
this.firstName = firstName;
this.surName = surName;
this.sayHi = function() {
alert(this.firstName + ' : ' + this.surName);
}
}
var user = new User('Василий', 'Пупкин');
var admin = new AdminUser('Иван', 'Горемыко');
在这里,我们在本文的上下文中调用用户。如本案例中的(参考)所示?我知道会创建一个新对象
User.call(this, firstName, surName);
我想了解在User.call(this)中作为this传递的是什么?创建继承类的最佳方法是:
function User(firstName, surName){
// Make assigment to properties.
this.firstName = firstName;
this.surName = surName;
};
// Declare default properties values:
User.prototype.firstName = '';//Set to empty string or whatever you need.
User.prototype.surName = '';//Set to empty string or whatever you need.
//Export functions to prototype.
User.prototype.sayHi = function(){/* Some code */};
function AdminUser(firstName, surName){
//Call parent class constructor
User.call(this, firstName, surName);
//Add addition logic here.
};
//Make prototype inheritance.
AdminUser.prototype = Object.create(User.prototype);
AdminUser.prototype.edit = function(){/* Some code */};
现在,您的AdminUser
继承自User
类,您可以进行检查:
var au = new AdminUser('Name','SurName');
console.log(au instanceOf User); //true
console.log(au instanceOf AdminUser); //true
你到底在问什么?这调用了“父”构造函数。JavaScript没有“AdminUser Extendes User”的概念。@RocketHazmat如果这是他们真正想要的,我认为最好让他们参考ES6类,不是吗?我同意@RocketHazmat。JavaScript中的继承现在不是最好的。在这种情况下,我只是从主干数据类型中窃取了“extend”方法。所以
User.extend=Backbone.Model.extend
然后AdminUser=User.extend({})
@stakolee,看看我下面的答案,在ES5中,您可以继承另一个类。你只需要多了解一些“函数.原型”的功能。你理解错了。直到那份遗产我才感兴趣。我想知道这个电话指的是什么?换句话说,它是在这个User.call(this)@AleksandrAleksandrov,User.call(this)
调用函数User
,上下文设置为this
,在您的情况下,它是对象obAdminUser
类实例。也就是说,这个对象将是admin?var admin=new AdminUser();//User.call(this)->this==adminYeah,this==admin将输出true
var admin=new AdminUser(arg1,arg2)
它将创建一个新的AdminUser实例。在AdminUser函数中,此
和admin
是同一个对象。然后调用函数User
,并指定函数User
中的this
将从函数AdminUser
设置为this
,该函数当前是对象admin
。如果您将创建新的AdminUser并将其分配给superAdmin
(var superAdmin=new AdminUser(arg1,arg2)
),则中的此
将引用superAdmin
,而中的此
也将引用superAdmin
。