普通函数和构造函数

一、区别:

例如 调用 function test() { }

构造函数 :
  1. new test( ) 用new关键字调用。
  2. this指向的是构造出的新对象。
  3. 构造函数是不需要用return显式返回值的,默认会返回this,也就是新的实例对象。
  4. 构造函数一般是首字母大写。
普通函数:
  1. test( ) 不需要用new关键字调用。
  2. 函数内部的this指向调用函数的对象(如果没有对象调用,默认是window)。
function greeting(){
    this.name="world";
    console.log("hello "+this.name);
}
greeting(); //hello world
console.log(window.name); //world
  1. 返回值由return语句决定。
  2. 普通函数遵照小驼峰式命名法。
二、构造函数的返回值:

有一个默认的返回值,新创建的对象(实例);
当手动添加返回值后(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的模板,后者继承了前者的属性和方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容