JS中prototype属性-JS原型模式
/*
*对象方法
*类方法
* 原型方法
*/
function People(name) {
this.name = name;
this.say = function () { //对象方法
alert("my name is "+this.name);
}
} People.run = function () { //类方法(静态方法,只能由类名调用)
alert("i can run");
} People.prototype.sayChinese = function () {//原型方法
alert("我的名字是:"+this.name);
} var p1 = new People("menglinghua");
p1.say();
People.run();
p1.sayChinese(); p1.prototype //无法获取????????
p1.run(); //无法调用???
p1.sayChinese(); //可以调用 People.say();//无法调用????????
People.sayChinese();//无法调用???????? People.prototype.say();//无法调用????????
People.prototype.run();//无法调用???????? /*
*eg1
*/
function baseClass()
{
this.showMessage = function () {
alert("baseClass::showMessage()");
}
} function extendClass()
{ } extendClass.prototype = new baseClass();
var extendClassObj = new extendClass();
extendClassObj.showMessage(); //输出"baseClass::showMessage()" /*
*eg2 两个类含有同名方法
*/
function baseClass() {
this.showMessage = function () {
alert("baseClass::showMessage( )");
}
} function extendClass() {
this.showMessage = function () {
alert("extendClass::showMessage( )");
}
} extendClass.prototype = new baseClass();
var extendClassObj = new extendClass();
extendClassObj.showMessage(); //输出"extendClass::showMessage( )" /*
*eg3 让extendClass的实例调用baseClass的同名方法
*/
function baseClass() {
this.showMessage = function () {
alert("baseClass::showMessage( )");
}
} function extendClass() {
this.showMessage = function () {
alert("extendClass::showMessage( )");
}
} extendClass.prototype = new baseClass();
var extendClassObj = new extendClass();
var baseClassObj = new baseClass();
baseClassObj.showMessage.call(extendClassObj);//让【extendClassObj】调用【baseClassObj】的【showMessage】方法
//输出:"baseClass::showMessage( )" /*
*eg4
*/
function baseClass()
{
this.showMessage = function () {
alert("baseClass::showMessage( )");
}
this.baseShowMessage = function () {
alert("baseClass::baseShowMessage");
}
}
baseClass.showMessage = function () {
alert("baseClass::showMessge static");
} function extendClass()
{
this.showMessage = function () {
alert("extendClass::showMessage( )");
}
} extendClass.prototype = new baseClass();
var extendClassObj = new extendClass(); extendClassObj.showMessage();//输出:extendClass::showMessage( )
extendClassObj.baseShowMessage();//输出:baseClass::baseShowMessage baseClass.showMessage.call(extendClassObj);//输出:baseClass::showMessge static var baseClassObj = new baseClass();
baseClassObj.showMessage.call(extendClassObj);//输出:baseClass::showMessage( )
http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html
JS中prototype属性-JS原型模式的更多相关文章
- js中Prototype属性解释及常用方法
1.prototype的定义 javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用. 每一个构造函数都有一个属 ...
- JS中prototype,js原型扩展
作者:轩脉刃(yjf512)出处:(http://www.cnblogs.com/yjf512/)版权声明:本文的版权归作者与博客园共有.欢迎转载阅读,转载时须注明本文的详细链接. 原文 http:/ ...
- JS中关于构造函数、原型链、prototype、constructor、instanceof、__proto__属性
在Javascript不存在类(Class)的概念,javascript中不是基于类的,而是通过构造函数(constructor)和原型链(prototype chains)实现的.但是在ES6中引入 ...
- 简单理解js的prototype属性
在进入正文之前,我得先说说我认识js的prototype这个东西的曲折过程. 百度js的prototype的文章,先看看,W3School关于prototype的介绍: 你觉得这概念适合定义js的pr ...
- js中prototype,__proto__,constructor之间的关系
首先,我们需要了解三点: 1. 只要创建一个任意新函数,就会根据一个prototype属性,该属性指向函数的原型对象: 2. 每一个原型对象都会自动获得一个constructor属性,该属性只想pro ...
- 复习一下js的prototype 属性
<html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</t ...
- Javascript中prototype属性详解 (存)
Javascript中prototype属性详解 在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不 ...
- (转载)详解Javascript中prototype属性(推荐)
在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...
- 【微信小程序】在js中导入第三方js或自己写的js,使用外部js中的function的两种方法 import和require的区别使用方法 【外加:使用第三方js导出的默认function的调用方法】
如下 定义了一个外部js文件,其中有一个function import lunaCommon from '../lunaCommon.js'; var ctx = wx.getStorageSync( ...
随机推荐
- ORACLE函数详解【weber出品】
一.什么是函数 一个函数: 1. 是命名的PL/SQL块,必须返回一个值 2. 可以存储到数据库中重复执行 3. 可以作为表达式的一部分或者提供一个参数值 二.创建函数的语法 必须至少有一个返回值,创 ...
- hdu5347 MZL's chemistry(打表)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud MZL's chemistry Time Limit: 2000/1000 MS ...
- Is Fibo
fib = {} f = [1, 1] fib[1] = True while f[-1] < 1e10: # 不断的计算,然后加在尾部,最后比对“in” f.append(f[-1]+f[-2 ...
- 用python随机生成数据,再插入到postgresql中
用python随机生成学生姓名,三科成绩和班级数据,再插入到postgresql中. 模块用psycopg2 random import random import psycopg2 fname=[' ...
- Scala学习文档-列表的使用
注:列表是不可变的,不能通过赋值改变列表的元素 列表具有递归结构,数组是连续的 scala里的列表类型是协变的? --> scala中的逆变与协变 分治原则 //自定义实现:::操作符 def ...
- ldd命令--查看命令依赖的库文件
.在制作自己的发行版时经常需要判断某条命令需要哪些共享库文件的支持,以确保指定的命令在独立的系统内可以可靠的运行:在Linux环境下通过ldd命令即可实现,在终端下执行:ldd /bin/ls //l ...
- javascript-ajax学习
/** * @todo 封装Ajax 传输类 * @param params:参数 * @example 用法: var mAjaxer = new Ajaxer(para ...
- Seafile的手册
http://manual.seafile.com/http://manual-cn.seafile.com/deploy/using_mysql.html 中文版http://manual-cn.s ...
- C++的构造函数总结
构造函数是C++的一个很基础的知识点,在平时编程的时候,相信大家都很熟悉,虽然比较基础,但是细究下来,还是有不少细节需要注意.这篇文章主要总结C++构造函数需要注意一些细节,一方面,可以帮助下大家巩固 ...
- OpenStackCLI调试及术语识记
1,Project are organizational units in the cloud,and are also known as tenants or accounts.Each user ...