将构造函数当做函数

构造函数与其他函数的唯一区别,就在于调用它们的方式不同。

任何函数,只要通过new操作符来调用,那它就可以作为构造函数;而任何函数,如果不通过new操作符来调用,那它跟普通函数也不会有什么两样。

function Person(name,age,job){
   this.name = name;
   this.age = age;
   this.job = job;
   this.sayName = function(){
        alert(this.name);
    };
}

//当作构造函数使用
var person = new Person("Nicholas",29,"software Engineer");
person.sayName();     //"Nicholas"

//作为普通函数调用
Person("Greg",27,"Doctor");    //添加到Window
Window.sayName();     //"Greg"

//在另一个对象的作用域中调用
var o = new Object();
Person.call(0,"Kristen",25,"Nurse");
o.sayName();       // "Kristen" 

call:在特定的作用域中调用函数;该方法接收两个参数,第一个参数是this,第二个参数是数组。

这个例子中可以看出构造函数的典型用法,即使用new操作符来创建一个新对象。后面的代码展示了不使用new操作符调用Person()会出现什么结果:属性和方法都被添加给Window对象了。

当在全局作用域中调用一个函数时,this对象总是指向Global对象(在浏览器中就是Window对象)。因此,在调用完函数之后,可以通过Window对象来调用sayName()方法。

最后也可以使用call()在某个特殊对象的作用域中调用Person()函数。这里是在对象o的作用域中调用的,因此调用后o就拥有了所有属性和sayName()方法。

陈健的个人博客,记录生活所见所感、学习笔记。专注于Web前端_SEO教程_读书心得。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

返回主页看更多
狠狠的抽打博主 支付宝 扫一扫