想加深一下自己对construtcor prototype的印象所以写了这一篇文章

对象的constructor 就是Object 除了通过构造函数创建的对象意外 他的constructor 都是 都是Object的实例

而通过构造函数创建的对象 他的constructor是指向这个构造函数的

     function Person() {
this.name = 'dzxczx';
this.sex = '男';
}
var obj = new Person();
console.log(obj.constructor);

prototype 是原形 是一个对象 是函数一创建就有的东西 对象没有这个东西undefined

 var obj = {
name : 'dzxczx'
}
console.log(obj.prototype);

函数一创建就存在prototype属性

 function func1() {
console.log(func1.prototype,typeof func1.prototype)
}
func1();

这个原形对象里面什么都没有 但是是存在的 这个原形里又有一个constructor属性这个属性指向当前函数

怎么给他添加属性方法呢 跟给对象添加是一样的

 function func1() {
}
func1.prototype.a = 10;
func1.prototype = {
b : 40
}
var obj = new func1();
console.log(obj.a);
console.log(obj.b);

都是可以的 注意func1.prototype.a要写在字面量的后面 不然是undefined

 function func1() {
}
func1.prototype = {
b : 40,
//constructor:'func1',
}
func1.prototype.a = 10;
var obj = new func1();
console.log(obj.a);
console.log(obj.b);

使用了 字面量的方式来写 会重写 constructor 重写之后不会指向 当前函数

 function func1() {
}
func1.prototype = {
b : 40,
//constructor:'func1',
alF:function() {console.log(func1.prototype.constructor)}
}
func1.prototype.a = 10;
var obj = new func1();
console.log(obj.a);
console.log(obj.b);
obj.alF();

我们可以自己再把他写回来 上面代码有

prototype 里面的属性和方法是共享的

 function func1() {}
func1.prototype.a = 10; var obj1 = new func1();
var obj2 = new func1();
console.log('obj1:'+obj1.a);
console.log('obj2:'+obj2.a);

如果对象实例中和原型中存在的属性或方法重名了 原形中的会被屏蔽 会使用实例中的

 function func1() {
this.a = 999;
}
func1.prototype.a = 10; var obj1 = new func1();
console.log('obj1:'+obj1.a);

hasOwnProperty 方法是检测一个属性是存在实例中还是存在原型中 如果存在实例中会返回true 不存在返回 false

 function func1() {
this.b = 999;
}
func1.prototype.a = 10; var obj1 = new func1();
console.log(obj1.hasOwnProperty('b'));
console.log(obj1.hasOwnProperty('a'));

in操作符是只要存在就返回true不管是实例还是原形

 function func1() {
this.b = 999;
}
func1.prototype.a = 10; var obj1 = new func1();
console.log('b' in obj1);
console.log('a' in obj1);

以上是 我对这两个属性的理解 如果有错误的地方请指出来 我及时修改 以免误导大家

JavaScript constructor prototyoe的更多相关文章

  1. JavaScript: Constructor and Object Oriented Programming

    Constructor :  Grammar: object.constructor Example: Javascript code: 1 function obj1() { this.number ...

  2. JavaScript Constructor & prototype

    阮一峰 JavaScript OOD 三部曲: 封装 JS 是一种基于对象(object-based)的语言. 但是JS不是一种真正的OOP语言, 因为语法中没有class. 以下就是简单的封装. 把 ...

  3. JavaScript -- Constructor、Prototype

    ----- 012-constructor.html ----- <!DOCTYPE html> <html> <head> <meta http-equiv ...

  4. JavaScript constructor 属性详解

    对象的constructor属性用于返回创建该对象的函数,也就是我们常说的构造函数. 在JavaScript中,每个具有原型的对象都会自动获得constructor属性.除了arguments.Enu ...

  5. <JavaScript>constructor、prototype、__proto__和原型链

    在看了网上很多相关的文章,很多都是懵逼看完,并不是说各位前辈们写得不好,而是说实在不容易在一两次阅读中理解透.我在阅读了一些文章后,自己整理总结和绘制了一些相关的图,个人认为会更容易接受和理解,所以分 ...

  6. [Javascript] Replicate JavaScript Constructor Inheritance with Simple Objects (OLOO)

    Do you get lost when working with functions and the new keyword? Prototypal inheritance can be compl ...

  7. Learning JavaScript Design Patterns The Constructor Pattern

    In classical object-oriented programming languages, a constructor is a special method used to initia ...

  8. JavaScript构造函数学习笔记

    1 理解Javascript constructor实现原理 在 JavaScript 中,每个函数都有名为“prototype”的属性,用于引用原型对象.此原型对象又有名为“constructor” ...

  9. 【推荐】JavaScript的那些书

    又好久没写东西了,写上一篇的时候还以为接下来的工作会轻松一些,结果未从我所愿呐,又是一阵忙碌.而这段时间穿插着做了很多12年淘宝校园招聘的前端面试,很多同学都有问到,学校里没有前端的课程,那如何学习J ...

随机推荐

  1. R包——ggplot2(二)

    关于ggplot包(二) 关于ggplot包(二) 标尺(Scale) 从前面可以看到,画图其实就是在做映射,不管是映射到不同的几何对象上,还是映射各种图形属性.在对图形属性进行映射之后,使用标尺可以 ...

  2. MySQL 创建用户与修改密码

    创建用户的 3 方法: 1 .create user userName identifed by 'yourPassword'; 2. grant select on *.* to userName@ ...

  3. thrift之初体验

    hrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, ...

  4. linux shell编程总结

    linux shell编程总结 本周学习了unix/linux shell编程,参考的是<LINUX与UNIX Shell 编程指南>,David Tansley著:徐焱,张春萌等译,由机 ...

  5. java的控制流程

    1.顺序结构顺序结构就是指按语句执行的先后顺序,或者说语句出现的先后顺序逐条执行程序语句.语句块,完全是按照程序平台的执行约定进行的,比如第一个 HelloWorld程序:public class H ...

  6. Mysql文件太大导入失败解决办法总结

    Mysql文件太大导入失败解决办法总结 在使用phpmyadmin导入数据库的时候可能会碰到由于数据库文件太大而无法导入的问题! 英文提示如下:File exceeds the maximum all ...

  7. ZOJ 3430 Detect the Virus(AC自动机)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3430 题意:给你n个编码后的模式串,和m个编码后的主串,求原来主 ...

  8. Hibernate学习之面试问题汇总

    1. Hibernate 的检索方式有哪些 ? ① 导航对象图检索 ② OID检索 ③ HQL检索 ④ QBC检索 ⑤ 本地SQL检索 2. 在 Hibernate 中 Java 对象的状态有哪些 ? ...

  9. jQuery常用方法集锦

    用方法:http://www.cnblogs.com/linzheng/archive/2010/11/14/1877092.html 数组汇总:http://www.cnblogs.com/Andy ...

  10. IOS本地化。

    1,项目名本地化 点击项目,蓝色图标->info 最下面+号,添加chinese本地化. Supporting Files->infoPlist.strings 下会有两个文件,有一个是设 ...