前几天写了一片 如何用正确的姿势编写jQuery插件 有朋友拍砖,指正。再此谢谢!

讨论:指定函数的constructor作用到底是什么?

我们一般写jQuery插件的时候是这样的:

//构造函数
function Person(options) {
this.name = "";
this.age = -1;
$.extend(this, options);
}
Person.prototype = {
getName: function () {
return this.name;
},
getAge: function () {
return this.age;
}
}
//调用
var person1 = new Person({ name: "zhangsan", age: 18 });
console.log(person1.getName()); //zhangsan
console.log(person1.constructor); //Object

从上面可以看出,我们在添加实例person1的时候在构造函数里面合并了this和options,虽然person1可以构造函数Person()的方法,

但是person1.constructor(也就是person1的构造函数返回的是Object),而我们明明是用Person()创建的,这里就需要指定一下constructor;

Person.prototype = {
constructor: Person,
getName: function () {
return this.name;
},
getAge: function () {
return this.age;
}
}

在群里讨论,我指定、不指定到底有什么用,我创建的实例都可以用我构造函数的方法? 到底有什么用处呢?如下:

var person2;
(function () {
function Person(opt) {
this.name = opt.name || "";
this.age = opt.age || "";
}
//请注意这里这么写和上面是有区别的 Person.prototype ={} 是改了整个原型,这是只是新增方法
Person.prototype.getName = function () {
console.log(this.name);
}
person2 = new Person({ name: "wangwu", age: 17});
})()
person2.getName(); //wangwu
person2.constructor //Person()

假如我想给闭包里面的构造函数扩张一个方法怎么弄呢?从代码上看可以知道person2的构造函数是Person(),那么就可以有以下方法:

person2.constructor.prototype.getAge = function () {
console.log(this.age);
}
person2.getAge(); //

可以不用看,不用寻找闭包里面的功能,直接在实例的构造函数的原型上加就行。

注意:person2.constructor.prototype.getAge = function () {} 不是修改整个构造函数的原型,而是新增属性。

这里说明一下在编写jQuery插件的时候还是要避免:覆盖了原型prototype没有重新指向其构造函数;

那样用户就可以在实例里面找到构造函数而添加方法了。

欢迎继续拍砖指正,这样的记忆是最牢固深刻的!

JavaScript函数constructor的作用,意义的更多相关文章

  1. JavaScript函数之作用域 / 作用链域 / 预解析

    关于作用域和作用链域的问题,很多文章讲的都很详细,本文属于摘录自己觉得对自己有价值的部分,留由后用,仅供参考,需要查看详细信息请点击我给出的原文链接查看原文件 做一个有爱的搬运工~~ -------- ...

  2. Javascript函数重载,存在呢—还是存在呢?

    1.What's is 函数重载? );//Here is int 10 print("ten");//Here is string ten } 可以发现在C++中会根据参数的类型 ...

  3. 深入理解javascript函数系列第二篇——函数参数

    × 目录 [1]arguments [2]内部属性 [3]函数重载[4]参数传递 前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传 ...

  4. 理解JavaScript函数参数

    前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数. arguments javascri ...

  5. 深入理解JavaScript函数参数

    前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数. arguments javascri ...

  6. javaScript系列 [01]-javaScript函数基础

    [01]-javaScript函数基础 1.1 函数的创建和结构 函数的定义:函数是JavaScript的基础模块单元,包含一组语句,用于代码复用.信息隐蔽和组合调用. 函数的创建:在javaScri ...

  7. 深入理解JavaScript函数

    本篇文章主要介绍了"深入理解JavaScript函数",主要涉及到JavaScript函数方面的内容,对于深入理解JavaScript函数感兴趣的同学可以参考一下. JavaScr ...

  8. Javascript属性constructor/prototype的底层原理

    在Javascript语言中,constructor属性是专门为function而设计的,它存在于每个function的prototype属性中. 这个constructor保存了指向function ...

  9. Javascript object.constructor属性与面向对象编程(oop)

    定义和用法 在 JavaScript 中, constructor 属性返回对象的构造函数. 返回值是函数的引用,不是函数名: JavaScript 数组 constructor 属性返回 funct ...

随机推荐

  1. 2018.12.17 struts.xml 配置自定义拦截器配置

    自定义拦截器有三个步骤哦 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PU ...

  2. Hashtable详细介绍(源码解析)和使用示例

    第1部分 Hashtable介绍 Hashtable 简介 和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射. Hashtable 继承于Dic ...

  3. H5面试题整理

    1.新的HTML5文档类型和字符集是? 文档类型:<!doctype html> 使用UTF-8编码示例:<meta charset="UTF-8"> 2. ...

  4. Python 学习笔记(三)数字

    Python 数字 int 整型  是正或负整数  2 long 长整型  整数最后是一个大写或小写的L   2L float  浮点型 由整数部分和小数部分组成   2.0 complex 复数 小 ...

  5. poj 2763 Housewife Wind : 树链剖分维护边 O(nlogn)建树 O((logn)²)修改与查询

    /** problem: http://poj.org/problem?id=2763 **/ #include<stdio.h> #include<stdlib.h> #in ...

  6. ABAP术语-BAPI (Business Application Programming Interface)

    BAPI (Business Application Programming Interface) 原文:http://www.cnblogs.com/qiangsheng/archive/2007/ ...

  7. 爬虫——正则表达式re模块

    为什么要学习正则表达式 实际上爬虫一共就四个主要步骤: 明确目标:需清楚目标网站 爬:将所有的目标网站的内容全部爬下来 取:在爬下来的网站内容中去掉对我们没有用处的数据,只留取我们需要的数据 处理数据 ...

  8. 关于antd-mobile中列表上拉加载PullToRefresh的使用

    相信有很多小伙伴发现antd-mobile中的下拉刷新组件,也发现例子挺难的,其实这个组件并没有那么复杂,只是demo例子不好理解,给大家提供一个简单的demo,或许可以帮到你 上拉刷新下拉加载 - ...

  9. Django模板语言(DTL)基础

    ## 模板变量 - 普通变量 {{ name }} - 对象变量(使用点号访问对象属性和方法,方法不加括号) {{ person.name }} ## 常用模板标签 # if标签,支持and,or,n ...

  10. php-5.6.26源代码 - hash存储结构 - 添加

    添加 , (void *)module, sizeof(zend_module_entry), (void**)&module_ptr){ // zend_hash_add 定义在文件“php ...