想加深一下自己对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);

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

最新文章

  1. 在集群上运行caffe程序时如何避免Out of Memory
  2. python模块
  3. js计算在线时长
  4. Python学习笔记07
  5. MyBatis源码分析(1)-MapConfig文件的解析
  6. Text3d
  7. swift第一季基础语法
  8. WPF如何实现拖拽打开文件(将文件拖进窗体打开)
  9. GET和POST的区别,就是明信片和信封的区别
  10. 手机时间选择插件 Jquery
  11. WPF下YUV播放的D3D解决方案
  12. Xamarin Mono 环境搭建
  13. C/C++遍历文件夹和文件
  14. Eclipse将引用了第三方jar包的Java项目打包成jar文件
  15. 验证 Swarm 数据持久性 - 每天5分钟玩转 Docker 容器技术(104)
  16. Canvas DrawImage截取和压缩图片的陷阱
  17. Xmanager6 下载地址
  18. JS数据类型之String类型
  19. js动态创建表单数据
  20. 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库

热门文章

  1. 美化 input type=file控件
  2. 一周学会Mootools 1.4中文教程:(7)汇总收尾
  3. php框架
  4. 关于GitHub账号及文章选题
  5. SPOJ 687 Repeats(后缀数组+ST表)
  6. Git安装及基本使用
  7. Java Native Interface Specification(JNI)
  8. 用C++如何实现开放API接口服务器
  9. GDB调试之core文件(如何定位到Segment fault)
  10. CSS3新动画效果