js面向对象编程-base基类-Dean Edwards

JavaScript 面向对象编程:Base 类及其基本方法 通过以上示例,我们展示了如何在 JavaScript 中创建一个基本的基类 Base,并定义了一些常用的方法。我们还展示了如何通过继承 Base 类创建一个子类 Derived,并添加额外的方法。在 JavaScript 中,面向对象编程是一种强大的编程范式,允许我们创建可重用的代码块,将数据和操作封装在对象中。在本文中,我们将介绍如何创建一个名为 Base 的基类,并实现一些基本的方法。在上述代码中,我们定义了一个名为 Derived 的子类,它继承自 Base 类。,用于获取和设置对象的年龄属性。 阅读详情

之前用js总是一个个的function,看见别人用js面向对象的写法,有点不懂,这几天看见同事直接用一个很小的base.js及简单实现了javascript的面向对象,并轻松实现了继承,

base.js获取地址:http://dean.edwards.name/base/Base.js

/**
 * 创建类
 * 通过调用Base类里面的extend方法,可以创建类:
 */
var Animal = Base.extend({
 name:"", //成员变量
 //构造方法
 constructor:function(name){
  this.name = name;
 },
 //方法
 eat:function(){
  this.say("hello!");
 },
 say:function(message){
  alert(this.name+":"+message);
 }
});
//使用方法
new Animal("tom").eat(); //alert:tom:hello!

/**
 * 继承
 * extend:调用这个方法,可以用另一个接口来扩展一个对象
 * base:如果某个方法被重载了,通过base方法可以访问被重载方法
 *
 * 所有使用这种方式创建的类会继承extend方法,所以我们可以简单的为Animal类创建子类
 */
var Cat = Animal.extend({
 eat:function(food){
  if(food instanceof Mouse){
   this.base(); //调用被重载的方法
  } else {
   this.say("Yuk! I only eat mice.");
  }
 }
});

var Mouse = Animal.extend();

new Cat('Cat').eat(new Mouse()); //alert:Cat:hello!
new Cat('Cat').eat('test');   //alert:Cat:Yuk! I only eat mice. 

/**
 * 实例方法、类方法比较
 * 如果你定义了一个叫做init的类方法 (不是实例方法) ,它会在类创建的时候自动的调用。
 * 在原型构造阶段(衍生子类)构造函数永远不会被调用
 */
var Shape = Base.extend({
 constructor:function(x,y){
  alert(x+y);
 }
});
var Circle = Shape.extend({ // instance interface
   constructor: function(x, y, radius) {
     this.base(x, y);
     this.radius = radius;
   },
   radius: 0,
   
   getCircumference: function() {
     return 2 * Circle.PI * this.radius;
   }
 },
 { // class interface
   PI: 3.14,
   init:function(){ //类方法 在类创建的时候就会被调用
   alert(2);
   }
 });
//alert:先 2 在 3 后 18.84
alert(new Circle(1,2,3).getCircumference());

js base层封装 一些js base层封装的函数,可供参考 立即下载

相关推荐

javascript Base类 包含基本的方法

代码如下: [removed] function Base(){} //根抽象类 Base.toBase=function(){ //将一个对象转化成Base类的实例的方法 return new Base(); } Base.inherit=function(parent){ //用于继承Base类的实例的方法 var F=function(){} F.prototype=parent; return new F; } Base.prototype.extend = function(prop){ //扩展根抽象类Base的extend方法 for

JS基础 类

阅读目录基础知识声明定义构造函数原理分析属性定义函数差异严格模式静态访问静态属性静态方法访问器语法介绍访问控制publicprotected命名保护属性保护详解继承属性继承继承原理方法继承super 表示从当前原型中执行方法constructor父类方法方法覆盖静态继承对象检测instanceofisPrototypeOf继承内置类,使用原型扩展内置类mixin实例操作 基础知识 为了和其他语言继承形态一致,JS提供了class 关键词用于模拟传统的class ,但底层实现机制依然是原型继承。 class

wgchen 1398

Silvaco TCAD仿真4——DeckBuild实战:从示例库到自定义设计

本文详细介绍了Silvaco TCAD仿真工具DeckBuild的实战应用,从示例库的使用到自定义设计的全过程。通过具体案例和参数修改技巧,帮助用户快速掌握TCAD仿真技术,提升半导体器件设计的效率和精度。特别适合需要从基础入门到进阶操作的工程师和研究人员。

weixin_29284657的博客 434

JavaScript 类知识点概览

继承允许我们依据另一个类来定义一个类,当创建一个类时,不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类(父类),新建的类称为派生类(子类)。关键字来声明一个类,类体是大括号 { } 中的内容.然后每个类中都有一个特殊的方法,constructor() 构造器,用于创建和初始化一个由 class 创建的对象。注意:类的声明不会提升,即类必须先声明定义,然后再使用。静态方法是使用 static 关键字修饰的方法,又叫类方法,属于类的,不属于对象。

m0_63622279的博客 635

【题解-洛谷】B3644 【模板】拓扑排序 / 家谱树

有个人的家族很大,辈分关系很混乱,请你帮整理一下这种关系。给出每个人的后代的信息。输出一个序列,使得每个人的后辈都比那个人后列出。输出一个序列,使得每个人的后辈都比那个人后列出。如果有多种不同的序列,输出任意一种即可。),表示家族的人数。

写代码的犄角旮瘩 1065

什么是华为OD?怎么才能通过华为OD机试?华为OD机试怎么刷题?(2024最新华为OD机试E卷更新中)

华为OD是Outsourcing Dispacth模式,是华为和外企德科联合招聘的简称。目前华为大多数是OD招聘。OD模式也是华为提出的一种新的用工形式,每年都会从OD项目挑优秀员工转为正编。所有OD和正式员工一样对待,没有差别,部门平时开会、评审等活动都是一起参加的,是同薪同酬,都是由华为的HR直接定的薪资,看的是我们技术能力。华为是大企业,能到华为上班也是有能力的,每个部门都有好多职位,是金子,在哪都会发光。

KJ.JK 11万+

JavaScript 中的继承和组合

怎么使用继承和组合

weixin_45575594的博客 589

Android功耗系列专题理论之六:外设功耗问题分析方法

本文介绍了移动设备功耗问题的分析方法,重点针对传感器和GPU两大模块。传感器部分详细讲解了通过ADB命令获取日志、状态差异分析和单传感器隔离测试的排查方法,并给出优化建议。GPU部分从基础功耗测量、场景测试到功能模块拆解进行多维度分析。同时阐述了GNSS/GPS功耗的测试方法,包括前后台对比、星座双频拆解及SAP/DPO等特殊功能的电流分析,为移动设备功耗优化提供系统性的诊断思路。

373

js 抽象基类

1. 抽象基类 有时候可能需要定义这样一个类,它可供其他类继承,但本身不会被实例化。虽然 ECMAScript 没 有专门支持这种类的语法 ,但通过 new.target 也很容易实现。new.target 保存通过 new 关键字调用的类或函数。通过在实例化时检测 new.target 是不是抽象基类,可以阻止对抽象基类的实例化 // 抽象基类 class Vehicle { constructor() { console.log(new.target); if (new.

weixin_42353499的博客 1322

08 RK3568 MAC TO MAC直连 RTL8367S mdio

本文:采用rk3568 gamc0 通过rgmii直连 交换芯片的mac口 通信方法为mdio。

qq_39451352的博客 3476

Python 爬虫实战:爬取评论数据做情感分析

摘要:本文介绍基于Python的京东商品评论爬取与情感分析全流程实现。通过Requests库抓取评论数据接口,结合JSON解析获取结构化评论信息。利用SnowNLP进行中文文本情感分析,量化用户评价的情感倾向(正面/负面/中性)。结果显示正面评论占比66.3%,负面评论13.3%,关键词分析发现"卡顿""发热"是主要负面因素。该方法可应用于产品优化、品牌管理等场景,为决策提供数据支持。

2503_91057718的博客 1709

关于JavaScript继承的Base类--Dean Edwards

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font

月亮脸的专栏 2804

【论文复现】——基于欧式聚类的车载点云道路提取

针对车载激光点云道路信息提取的问题,提出了一种基于欧式聚类的道路提取方法。首先通过统计滤波去除噪点以免对后续处理结果产生影响,然后用坡度滤波去除路坎点,使道路边界与人行道、绿化带等与路坎相连的地物形成10~25 cm的高程阶跃,最后用欧式聚类将路面点云与其他地物点云聚类为一簇或多簇并保留道路簇,从而实现道路点云的精确提取。

点云侠的博客 1135

Dean Edwards -- Base.js(译)

我是一个由衷的面向对象的程序员,并且JavaScript支持基于继承的原型(prototype)。不幸的是这会导致冗长的类定义: functionAnimal(name){}; Animal.prototype.eat=function(){}; Animal.prototype.say=function(message){ 我希望能有一个良好的关于JavaScri...

weixin_34315665的博客 104

使用 Visual Studio Code 搭建 SAP UI5 本地开发环境

工欲善其事,必先利其器。时至今日,SAP 提供了非常多的 SAP UI5 开发工具,既包含本地搭建的,也包含浏览器里远端使用的工具,比如 WebIDE 和 Business Application Studio. 我们访问下面这个链接,就能找到所有这些工具的安装或者配置步骤: https://tools.hana.ondemand.com/#sapui5 如果想选择本地开发,SAP 推荐的工具是 Visual Studio Code,也就是本文要介绍的内容。 也可以下载 WebIDE 的本地安装包,将其安

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Comment of Dean Edwards’s Base Library By John Resig

Download from "[url]http://www.apress.com/book/downloadfile/3291[/url]" [code="javascript"] // The Base object constructor var Base = function(obj){ // Only work if there's something to exte...

mismo的专栏 207

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

JS,html压缩及混淆工具

现在已经出现了不少有自己特色的: JSMin Javascript compressor Packer Closure Compiler YUI Compressor Pretty Diff JavaScript Optimizer pack:tag Minify Lightweight CssMin...

azhen5222的博客 942

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

[jQuery]使用dean的javascript packer的一些体会

dean开发的javascript packer是用在jquery相关项目中最多的packer了。现在是3.0。它是一个web工具,可以在线进行压缩。它的使用很简单: 进入网站 粘贴要压缩的代码 执行pack 它还有几个选项:Base62 encode和Shrink variables。如果这两个选项不选的话,只是去掉多余的空格,换行,注释之类的。如果选择Base...

limodou 241

JS继承

1. 原型式继承 [code="java"] // 为Person对象创建一个构造函数 function Person(name) { this.name = name; } // 给Person对象添加一个新方法 Person.prototype.getName = function(){ return this...

greybeard的专栏 106

一些很棒的js代码

本来是想放在博客园首页的,貌似篇幅不够被移除掉了。后来慢慢补上,看这篇文章吧:一些优秀的代码分析与学习【持续更新】,里面的内容会持续更新,这篇文章作废了 1.jQuery初始化代码段   技术亮点:jQuery无new化构建、每次jQuery构建的作用域隔离、jQuery拓展插件。   实现源码: var jQuery = function(args){ retu...

ajb11683的博客 210

JavaScript里function函数实现可变参数(多态)

全文来自:http://www.oschina.net/question/54100_15938 使用javascript类库函数时,经常会遇到一个函数,可以使用不同个数的参数的情况 比如:exp(var1) exp(var1, var2) 但是在实际编写javascript函数时, 函数不能同名,所以不可能是不同参数个数分开写; 参数个数必须符合函数的设置,所以函数声明里有的就必须有,不可能调用时写少几个; …… 这个问题是困扰了很久了,一直不知道为什么?! 今天一早在看别人代码,无意中竟然看到了~ 原来

weixin_45641191的博客 3891

Packer,你对我的JS做了什么!

  最近在看JQuery作者John Resig 写的Pro JavaScript Techniques,虽说书是06年的,但是其中很多内容拿到现在的JS开发中来也依然适用。 其中说到源代码压缩方面,jsMin只是简单的去除注释和空白字符,JS大牛Dean Edwards写的Packer,压缩率很高,但是压缩完以后的代码不好阅读,看到这里,我很想知道Packer压缩完以后的代码到底成什么...

SEO Mine 345

php 动态css,PHP实现动态压缩js与css文件的方法

本文实例讲述了PHP实现动态压缩js与css文件的方法。分享给大家供大家参考,具体如下:正式发布产品时,我们希望将项目里的js,css合并压缩,以减少http请求、防止轻易查看源代码。使用只需要在头部引入一下代码即可:demo//定义需要压缩的文件$css = array(CSS_PATH . 'base.css',CSS_PATH . 'style.css',CSS_PATH . 'my.css...

weixin_39837727的博客 99

前端开发js中的class(类)继承

类继承是 JavaScript 中的一种面向对象编程机制,它允许派生类从基类中继承属性和方法,同时也可以扩展自身的功能。通过类继承,我们可以组织和重用代码,并创建更高级的数据模型。它提供了一种结构化的方式来定义对象之间的关系,并能够更好地管理代码的复杂性。类继承是 JavaScript 中实现面向对象编程的机制之一。它允许我们创建一个基类并从基类派生出一个或多个派生类。派生类继承了基类的属性和方法,并可以添加自己的属性和方法。

qq_48845432的博客 524

Javascript定义类(class)的三种方法

Javascript定义类(class)的三种方法 将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言。如果你忘了填写用户名,它就跳出一个警告。 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途。程序员用它完成越来越庞大的项目。 Javascript代码的复杂度也直线上升。单个网页包含10000行Javascript代码,早就司空见惯。

zw946的专栏 1156
上一篇: js面向对象编程-prototype
下一篇: linux的命令crontab的格式和解释
技术宝哥
博客等级 码龄16年 331粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值