案例代码:

 function People(name) {
//对象属性
this.name = name;
//对象方法
this.Introduce = function() {
alert("My name is " + this.name);
}
}
//类方法
People.Run = function(){
alert("I can run");
}
//原型方法
People.prototype.IntroduceChinese = function() {
alert("我的名字是" + this.name);
}

测试:

var p1 = new People("guanghe");

分析:

对象方法需要通过实例化对象去调用:
  p1.Introduce();
原型方法也需要通过实例化对象去调用,js查找属性在对象本身查不到,会去查其构造方法的原型的属性,而不是构造方法的属性:
  p1.IntroduceChinese();
其实等同于:
  p1._proto_.IntroduceChinese();
类方法不需要通过实例化对象去调用,实例化的对象反而调不到:
  People.Run();
想要通过对象调用类的方法,因为其构造方法即为父类,所以可以这样调用:
  p1.constructor.Run();

总结:

  由此可见,p1在被创建之时,继承了People的prototype(其实是生成了指向其构造方法原型的指针_proto_),并执行了构造方法。通过每个js向都有的_proto_属性,能够访问到构造方法的原型的属性,形式上直接调用,就像在访问自己的属性一样。而构造方法的属性却不能直接访问,要调用还要使用constructor属性间接进行调用。

知识点:

1,js一切皆对象,方法也是对象
2,js对象的_proto_指向其constructor的prototype
3,js一般对象没有prototype属性,类(方法)对象才有
4,js通过new出来的对象能够访问其构造方法原型的所有属性,但不能直接访问构造方法的属性
5,js的对象是动态的

 //创建一个对象
p1 = new People();
//给其构造方法的原型添加属性
People.prototype.a = 1;
//之前创建的对象能够访问到新添加的属性
p1.a

JS类、对象、方法、prototype、_proto_的更多相关文章

  1. 几种常用的JS类定义方法

    几种常用的JS类定义方法   // 方法1 对象直接量var obj1 = {    v1 : "",    get_v1 : function() {        return ...

  2. 全面了解python中的类,对象,方法,属性

    全面了解python中的类,对象,方法,属性 python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... 我们通过描述属性( ...

  3. js 继承 对象方法与原型方法

    js函数式编程确实比很多强语言使用灵活得多,今天抽了点时间玩下类与对象方法调用优先级别,顺便回顾下继承 暂时把原型引用写成继承 先看看简单的两个继承 var Parent = function(){} ...

  4. 几种常用的JS类定义方法(转)

    // 方法1 对象直接量 var obj1 = { v1 : "", get_v1 : function() { return this.v1; }, set_v1 : funct ...

  5. JS定义对象方法?

    第一种:构造函数形式  把参数作为构造函数的参数传递,这样对于对象的初始化更灵活一点 <script language="javascript"><!-- /** ...

  6. JS:Math 对象方法

    Math 对象方法方法     描述Math.ceil(x)     对数进行上舍入.(向上取整:大于等于x的最小整数)Math.floor(x)     对数进行下舍入.(小于等于x的最大整数)Ma ...

  7. JS类对象实现继续的几种方式

    0. ES6可以直接使用class,extends来继承. 1.  原型继承 父类: function Persion(name,age){ this.name = name; this.age = ...

  8. 原生js实例对象方法

    Array中的方法 ☞ toString() // 把数组转换为字符串,使用逗号分隔☞ valueOf() // 返回数组对象本身 ☞ 栈方法(先进后出)ary.push() // 该方法有一个返回值 ...

  9. js数组对象方法

  10. js string对象方法

    substr(start,length) substring(start,end) 返回子串,原字符串不改变.

随机推荐

  1. SharedPreferences小技巧

    相信Android的这个最简单的存储方式大家都很熟悉了,但是有一个小小技巧,也许你没有用过,今天就跟大家分享一下,我们可以把SharedPreferences封装在一个工具类中,当我们需要写数据和读数 ...

  2. 【BZOJ2037】[Sdoi2008]Sue的小球 区间DP+费用提前

    [BZOJ2037][Sdoi2008]Sue的小球 Description Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而 ...

  3. Netty进行RPC服务器的开发 需要考虑的问题

    谈谈如何使用Netty开发实现高性能的RPC服务器 - Newland - 博客园 http://www.cnblogs.com/jietang/p/5615681.html 如何实现.基于什么原理? ...

  4. Windows系统优化

    1.关闭家庭组,因为这功能会导致硬盘和CPU处于高负荷状态: 关闭方法:windows + R 打开运行,输入services.msc回车,右侧窗格找到“HomeGroup Listener”和“Ho ...

  5. js小数四舍五入,保留两位小数

    直接用用number.toFixed(2)即可 <template> <section class="p-10"> <h1> {{ number ...

  6. 持续集成之戏说Check-in Dance(转)

    add by zhj: 先说一下持续集成的定义,这是ThoughtWorks首席科学家Martin Fowler在<持续集成>第二版中给出的,“持续集成是一种软件开发实践.在持续集成中,团 ...

  7. SVN导出Maven项目

    1.从SVN检出项目 -> 作为工作空间中的项目检出 2.转换成Maven project 3.将Maven Project 转化成 Maven app 右击项目-> Properties ...

  8. linux 这是定时任务

    1. 编写shell脚本:vim test.sh #/bin/bash echo "hello world" 2.crontab任务配置基本格式: *   * * * * comm ...

  9. python 字符串的格式化

    python字符串的格式化分为两种:1)% 方式    2)str.format()  方式. str.format() 是比 % 较新的方式, 大多数的 Python 代码仍然使用 % 操作符.但最 ...

  10. (转)Linux下配置tomcat+apr+native应对高并发

    摘要:在慢速网络上Tomcat线程数开到300以上的水平,不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待.但是配上APR之后,Tomcat将以JNI的形式调用Apache HTTP服 ...