一、区别:
例如 调用 function test() { }
构造函数 :
- new test( ) 用new关键字调用。
- this指向的是构造出的新对象。
- 构造函数是不需要用return显式返回值的,默认会返回this,也就是新的实例对象。
- 构造函数一般是首字母大写。
普通函数:
- test( ) 不需要用new关键字调用。
- 函数内部的this指向调用函数的对象(如果没有对象调用,默认是window)。
function greeting(){
this.name="world";
console.log("hello "+this.name);
}
greeting(); //hello world
console.log(window.name); //world
- 返回值由return语句决定。
- 普通函数遵照小驼峰式命名法。
二、构造函数的返回值:
有一个默认的返回值,新创建的对象(实例);
当手动添加返回值后(return语句):
1. 返回值是基本数据类型-->真正的返回值还是那个新创建的对象(实例)。
2. 返回值是复杂数据类型(对象)-->真正的返回值是这个对象。
例子
function foo() {
var f2 = new foo2();
console.log("f2",f2);
console.log("foo--> this",this);
return true;
}
function foo2() {
console.log("foo2--> this",this);
return {a: 3};
}
var f1 = foo();
console.log("f1",f1);
image
Object.create()
方法
构造函数作为模板,可以生成实例对象。但是,有时候拿不到构造函数,只能拿到一个现有的对象,我们希望以现有的对象作为模板,生成新的实例对象,这时可以使用
Object.create()
方法。
var person1 = {
name: '张三',
age: 38,
greeting: function() {
console.log('Hi! I\'m ' + this.name + '.');
}
};
var person2 = Object.create(person1);
person2.name // 张三
person2.greeting() // Hi! I'm 张三.
上面代码中,对象person1是person2的模板,后者继承了前者的属性和方法。