Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如构造函数中所示_Javascript - Fatal编程技术网

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
,在您的情况下,它是对象ob
AdminUser
类实例。也就是说,这个对象将是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