prototype和constructor之初理解

  因为整理以前的笔记,发现了这两个东西,也算是我对他们最初的最幼稚的理解吧。

  乍一回忆,prototype是为一个大的类增加行为用的,而这个行为实例们普遍都要用到;而constructor顾名思义是构造,构造函数?

  先说说prototype,因为理解的很浅,感觉没啥好说的,直接上个例子:

 1 function Person() {
 2   this.age = 20;
 3   this.name = ‘hello world‘;
 4 }
 5
 6 Person.prototype.show = function() {
 7   alert(this.name);
 8 };
 9
10 var a = new Person();
11 a.show();

  第六行用到了prototype,直接为Person类增加了一个方法,具体的实例可以直接调用。

 1 Object.prototype.show = function() {
 2   console.log(‘hello world‘);
 3 };
 4 var a = ‘1‘;
 5 a.show();
 6 var b = 1;
 7 b.show();
 8 var c = true;
 9 c.show();
10 var d = function() {};
11 d.show();
12 var e = new String(‘123‘);
13 e.show();

  除了null和undefined之外其他的本地对象都继承自Object,所以在Object对象的prototype属性上定义的方法每个本地对象都能继承。

  接着来看个具体的例子:

1 var Func = function() {};
2 Func.prototype.age = 10;
3 var obj = new Func();
4 Func.prototype = {age: 40};
5 Func.prototype.age = 30;
6 var obj2 = new Func();
7 console.log(obj.age);
8 Func.prototype.age = 20;
9 console.log(obj2.age);

  答案是10和20。这里需要理解prototype的重新赋值,如果对prototype整个重新赋值的话,就是重新划分了一块内存储存这个新的原型,比如第四行,但是之前的实例都是引用到旧的原型上,这就是obj.age为什么一直是10的原因。而obj2.age的值随着Func.prototype.age的改变而改变。懒得写了,以后再写吧...

  

时间: 2024-08-29 06:01:12

prototype和constructor之初理解的相关文章

prototype 以及 constructor 属性的理解

1 为什么 xx.constructor.prototype 可以访问到当前对象的原型. 'str'.constructor.prototype 'str'.constructor 指向当前对象的构造函数 (构造函数).prototype:即函数的prototype 属性 1 函数有prototype属性,所以可以访问到 2 函数的prototype属性会在创建实例的时候作为实例的原型而存在. 所以 'str'.constructor.prototype 就可以访问到当前对象实例的原型. 1 '

为什么要设置Javascript对象prototype的constructor

最近读了一篇关于Javascript面向对象编程的文章,里面介绍了Javascript中的类,对象,属性,方法,构造函数,继承,封装,抽象和多态性.读完之后感觉受益匪浅,对Javascript有了进一步的认识.文章的地址在这里. 在讲到继承的时候,文章里面用了如下的例子 // define the Person Class function Person() {} Person.prototype.walk = function(){ alert ('I am walking!'); }; Pe

Prototype and Constructor in JavaScript

The concept of prototype in JavaScript is very confusing, especially to those who come with a C++/JAVA/... background. As an OOP langauge, JavaScript is very different from the languages with class. Its classless feature make it somehow difficult to

关于JS中原型链中的prototype与_proto_的个人理解与详细总结(代码示例+高清无码大图!——自备瓜子花生)

一直认为原型链太过复杂,尤其看过某图后被绕晕了一整子,今天清理硬盘空间(渣电脑),偶然又看到这图,勾起了点回忆,于是索性复习一下原型链相关的内容,表达能力欠缺逻辑混乱别见怪(为了防止新人__(此处指我)__被在此绕晕,图片就放在末尾了.) 以下三点需要谨记 1.每个对象都具有一个名为__proto__的属性: 2.每个构造函数(构造函数标准为大写开头,如Function(),Object()等等JS中自带的构造函数,以及自己创建的)都具有一个名为prototype的方法(注意:既然是方法,那么就

JavaScript——面向对象初理解

JS事件驱动,基于对象的非编译性语言,所以首先来看看对象的创建问题. JS中对象的创建不像之前学过的语言使用class关键字,分为两大类,一般的创建方式和使用function关键字的.一般的方式每次相当于创建了了一个对象,如果想要创建类似的对象就会有大量的相似代码,这不符合面向对象,所以使用function相当于是使用class创建以一个类,可以通过类来实例化对象. 一般的创建对象的实例 //使用new Object()方法 var box=new Object();//创建一个对象,new可以

15条规则解析JavaScript对象布局(__proto__、prototype、constructor)

大家都说JavaScript的属性多,记不过来,各种结构复杂不易了解.确实JS是一门入门快提高难的语言,但是也有其他办法可以辅助记忆.下面就来讨论一下JS的一大难点-对象布局,究竟设计JS这门语言的人当时是怎么做的?设计完之后又变成了什么? 我们来看一张图: 相信大家对这张图都不陌生了,构造函数有一个prototype属性指向其原型.相反原型也有一个constructor指向构造函数.与此同时实例也有一个constructor指向构造函数,这简直就是互相捆绑生怕找不到啊不是吗? 还有一个我们称之

EventBus初理解

缘由: 平时工作,因为懒于动笔的原因,也没注重技术和经验的积累,导致之前曾经研究过的问题现在又忘记了,所以要慢慢注重积累,那么就从写作开始,谈谈对工作中碰到的问题进行整理和归纳. 我们都知道,在Android中,想处理事件传递,可以用Handler+MessageQueue+Message+Looper循环,固然是有解决方法,但是这个使用起来不方便,代码写起来也不简洁,同时还必须要理解好Handler+MessageQueue+Message+Looper之间的关系,比如这样的图: 是不是看到觉

js中的prototype和constructor

本文正确性有待商榷,高手路过请不吝指教 1.js中只有对象,包括对象,函数,常量等. 对象不用解释.函数也有属性,常见之一就是prototype.常量也有属性: (3).__proto__;//Number {} 2.函数的prototype 函数是一种特殊的对象,它可以直接通过小括号来执行自身代码. 函数还有一个特殊的属性prototype,它也是一个对象. prototype对象也有一个特殊的属性constructor,初始的时候它是指向该函数的. 也就是当js解释到function关键字的

js 中的 prototype 和 constructor

var a=function(){ this.msg="aa"; } a.prototype.say=function(){ alert('this is say');} 1.只有函数有prototype  ,a.prototype.constructor 指向 a 2.var obj=new a()  obj是没有prototype 对象的,但是有constructor切指向a 3.关于继承 var b=function(){ this.msg="bb"; } b