JavaScript constructor prototyoe
想加深一下自己对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的更多相关文章
- JavaScript: Constructor and Object Oriented Programming
Constructor : Grammar: object.constructor Example: Javascript code: 1 function obj1() { this.number ...
- JavaScript Constructor & prototype
阮一峰 JavaScript OOD 三部曲: 封装 JS 是一种基于对象(object-based)的语言. 但是JS不是一种真正的OOP语言, 因为语法中没有class. 以下就是简单的封装. 把 ...
- JavaScript -- Constructor、Prototype
----- 012-constructor.html ----- <!DOCTYPE html> <html> <head> <meta http-equiv ...
- JavaScript constructor 属性详解
对象的constructor属性用于返回创建该对象的函数,也就是我们常说的构造函数. 在JavaScript中,每个具有原型的对象都会自动获得constructor属性.除了arguments.Enu ...
- <JavaScript>constructor、prototype、__proto__和原型链
在看了网上很多相关的文章,很多都是懵逼看完,并不是说各位前辈们写得不好,而是说实在不容易在一两次阅读中理解透.我在阅读了一些文章后,自己整理总结和绘制了一些相关的图,个人认为会更容易接受和理解,所以分 ...
- [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 ...
- Learning JavaScript Design Patterns The Constructor Pattern
In classical object-oriented programming languages, a constructor is a special method used to initia ...
- JavaScript构造函数学习笔记
1 理解Javascript constructor实现原理 在 JavaScript 中,每个函数都有名为“prototype”的属性,用于引用原型对象.此原型对象又有名为“constructor” ...
- 【推荐】JavaScript的那些书
又好久没写东西了,写上一篇的时候还以为接下来的工作会轻松一些,结果未从我所愿呐,又是一阵忙碌.而这段时间穿插着做了很多12年淘宝校园招聘的前端面试,很多同学都有问到,学校里没有前端的课程,那如何学习J ...
随机推荐
- 以Android环境为例的多线程学习笔记(二)-----------------锁和条件机制
现在的绝大多数应用程序都是多线程的程序,而当有两个或两个以上的线程需要对同一数据进行存取时,就会出现条件竞争,也即 是这几个线程中都会有一段修改该数据状态的代码.但是如果这些线程的运行顺序推行不当的话 ...
- 对discuz的代码分析学习(二)首页文件
如果当前地址栏存在查询字符,并且是一个数字,条件成立. 查询字符:www.baidu.com/index.php?aaa=bbb aaa=bbb就是查询字符如果条件成立,则把 ...
- 部署nginx+rsyslog补丁
nginx 配置: user nginx; worker_processes 1; syslog local5 nginx; error_log /var/log/nginx/nginx_error. ...
- [2013.9.8网络首发]导入Android4.2源码里的Gallery2和Camera模块至Eclipse全过程
[2013.9.8网络首发]导入Android4.2源码里的Gallery2和Camera模块至Eclipse全过程 google的android自带的apps写的是相当牛逼的,将其导入到ecli ...
- 解决Windows 程序界面闪烁问题的一些经验
原帖地址:http://blog.joycode.com/yaodong/archive/2004/11/26/39764.aspx 一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化 ...
- 《windows程序设计》学习_2.2:初识消息,双键的使用
/* 双键的使用 */ #include <windows.h> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI ...
- android之获取应用中的图片资源_获取找你妹中的图片资源
一直不知道原来获取一个应用中的图片资源这么简单,刚才直接把apk解压,就得到了里面的一下文件,搜索一下就全部把图片资源找出来了,想要模仿应用或者自己不会ui的话,用现成的资源方便多了. 也没多少说的, ...
- opencv 简单、常用的图像处理函数(2)
opencv的项目以来配置和环境变量的配置都很简单,对于我这个没有c++基础的来说,复杂的是opencv的api和一些大部分来自国外没有翻译的资料,以及一些常见的编码问题. 资料 opencv 中文a ...
- ztree树形插件
在开发项目中需要用到树插件,近期研究了几款树插件,好记性不如烂笔头 ,写下来 以后好查 MzTreeView(梅花雪) 很经典的树形菜单脚本控件 菜单树展示加载速度快 支持1w条以上大数据 缺点-- ...
- 线段树讲解(数据结构、C++)
声明 : 仅一张图片转载于http://www.cnblogs.com/shuaiwhu/archive/2012/04/22/2464583.html,自己画太麻烦了...那个博客的讲解也很好 ...