JavaScript六种比较常见的原型创建对象的方法

腾讯云TDSQL MySQL版 - 开发指南兼容性 语言结构 分布式实例支持所有 MySQL 使用的文字格式,包括: String Literals Numeric Literals Date and Time Literals Hexadecimal Literals Bit-Value Literals Boolean Literals NULL Values String Literals String Literals 是一个 bytes 或者 characters 的序列,两端被单引号'或者双引号"包围,TDSQL MySQL版 阅读详情

1.传统原型法:

a. 当完成一个函数声明之后, js引擎会自动的创建一个对象, 这个对象表示函数对象.

函数对象会有一个属性 prototype, 他指向一个对象, 这个对象也是自动创建出来的, 这个对象
就是函数的原型对象.

原型对象也有一个属性: constructor , 表示构造器,他会指向函数对象.

b. 任何的函数都会有原型对象. 只是, 我们只关注和研究构造函数的原型对象, 普通函数的原型对象
我们不关注.

<script>
function Person(name, age){
    this.name = name;
    this.age = age;
	//如果方法写在函数对象里,那么每次new一个对象就会调用一次方法,在堆内存中创建一个函数对象,很占内存。
    /*this.speak = function (){
        console.log("我是对象上的方法");
    }*/
}

Person.prototype.sex = "男";
//在原型对象上写方法,会比较灵活,而且不占内存。
Person.prototype.speak = function (){
    console.log("我是原型对象上的方法");
}

var p1 = new Person("李四", 20);
console.log(p1.age);
console.log(p1.name);
//对象p1没有属性sex,他会通过不可见属性[[ proto]]去访问原型对象里的sex
console.log(p1.sex);
//speak方法写在了原型里,作用是不占过多的内存
p1.speak();
//检测Person.prototype,就是检测其原型对象是谁。在这里原型对象里有speak方法和sex属性。
console.log(Person.prototype);
//判断原型的constructor的指向是不是person,实际上的确,返回true。
console.log(Person.prototype.constructor === Person);
</script>
运行结果:


2.组合模式原型法

所谓组合那就是把属性封装在一起,把所有的方法写在原型里。

a. 数据属性, 应该放在对象本身.  在构造函数中使用  this.xxx = XXX

b. 方法应该添加在原型对象上.  因为方法最好所有的对象所共有.

这种封装性比较差,相对无言。

而且这种的话,每次调用会产生垃圾,比如三次调用同一原型中的同一方法,那么就会两次覆盖其原型的属性,产生了两次的垃圾。为了防止垃圾的产生,我们就有了第三种的动态原型。先看这种组合模式原型:

<script>
// 组合模型创建对象的方式
function Person(name, age){
    this.name = name;
    this.age = age;
    
}
//将所有方法写在原型对象里
Person.prototype.speak = function (){
    console.log("speak..." + this.name);
}
Person.prototype.say = function (){
    console.log("say..." + this.age);
}
Person.prototype.eat = function (){
    console.log("eat....");
}


var p1 = new Person("李四", 20);
var p2 = new Person("李三", 200);
var p3 = new Person("李二", 120);
p1.speak();
p2.speak();
p3.speak();

</script>

运行结果:


3.动态原型

通过if判断,看他是否已经产生了。这样就不会产生垃圾。

这个封装性挺好,因为放在整个对象内。

<script>
// 动态原型创建对象
function Person(name, age){
    this.name = name;
    this.age = age;
    if (!Person.prototype.speak){
		//看他里面的方法执行了几次调用了几次
		console.log("我内容只有一次,那么就说明我这个speak方法在原型中只创建了一次。");
        Person.prototype.speak = function (){
            console.log("speak..." + this.name);
        }
    }
    /*Person.prototype.say = function (){
        console.log("say..." + this.age);
    }
    Person.prototype.eat = function (){
        console.log("eat....");
    }*/
}

var p1 = new Person("李一", 10);
var p2 = new Person("李二", 20);
var p3 = new Person("李三", 30);
//检测函数对象是否有speak方法,有的话就输出函数,没有就输出undefined。
//输出undefined是JS的一种安全机制,如果对象.属性(方法),如果这个方法或属性没有定义声明,那么只是显示undefined
//但如果是单纯的变量,那么如果没有声明定义,就会报错,报错信息为:XX没有被定义。
Person.prototype.speak();
p1.speak();
p2.speak();
p3.speak();

</script>
运行结果:


4.原型替换一

为啥要改变系统的默认原型:

本来我们为原型里添加属性方法要这样做:

Person.prototype.speak = function (){
            console.log("speak..." + this.name);
        }

但是我们现在如果给一个自己设定的原型,我们在自己创建对象里添加方法和属性只需:

speak: function (){
        console.log(this.name);
    },

是不是更简单点更方便点呢。

456三种原型替换的方法,都是这么做,只是依次还会有些改进。

<script>
function Person(name){
    this.name = name;
}
//改变系统的指向到那个原型,我们另外创建一个对象,让person函数对象指向我们新创建的对象。这里用对象字面量的表达方式。

Person.prototype = {
		//	让他指向回去
    constructor: Person,
    speak: function (){
        console.log(this.name);
    },
    say: function (){
    
    }
}
var p1 = new Person("李四");
p1.speak();
</script>

运行结果:


5.原型替换二

把数据属性通过参数封装起来。

<script>
//把一些数据属性也封装起来,通过参数传递
function Person(name, age, sex){
   this._init(name, age, sex);
}

//改变系统默认原型指向
Person.prototype = {
//初始化数据属性值
    _init :function (name, age, sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
    },
	//指向回去
    constructor: Person,
    speak: function (){
        console.log(this.name);
    },
    say: function (){
    
    }
}
var p1 = new Person("李四");
p1.speak();
</script>

运行结果:

5.终极原型替换法(大神级别)

这种写法就是大神级别的啦。

<script>
//把一些数据属性也封装起来,通过参数传递
function Person(name, age, sex){
   this._init(name, age, sex);
}

//改变系统默认原型指向
Person.prototype = {
//初始化数据属性值
    _init :function (name, age, sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
    },
	//指向回去
    constructor: Person,
    speak: function (){
        console.log(this.name);
    },
    say: function (){
    
    }
}
var p1 = new Person("李四");
p1.speak();
</script>

运行结果:


再来我们看一下用这种大神级别的方法进行练习:
题目:
题目: 定义一个创建“长方形”的构造函数(有参数,通过参数给属性赋值)
属性:长(length);(实例属性)
 宽(width);(实例属性)
方法:求面积;(原型方法)
     求周长;(原型方法)
通过这个构造函数创建出3个不同的对象,并调用对象方法计算对象的面积和周长;

solution:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Rectangle</title>
</head>
<body>
<!--题目: 定义一个创建“长方形”的构造函数(有参数,通过参数给属性赋值)
属性:长(length);(实例属性)
 宽(width);(实例属性)
方法:求面积;(原型方法)
     求周长;(原型方法)
通过这个构造函数创建出3个不同的对象,并调用对象方法计算对象的面积和周长;
-->
<script>
    //构造函数,传递一个对象obj
    function Rectangle(obj) {
        this._init(obj);
    }

    //原型替换
    Rectangle.prototype = {
        //使得原型函数又指向Rectangle函数对象
        constructor:Rectangle,
        //原型的方法,对初始化属性进行单独封装成对象,用对象传递
        _init: function (obj) {
            //css6中的方法,就是把obj对象中的属性全部传到this里
            Object.assign(this, obj);
        },
        area: function () {
            return this.width * this.length;
        },
        perimeter: function () {
            return this.width * 2 + this.length * 2;
        }
    };

    //new对象
    var r1 = new Rectangle({length: 10, width: 10});
    var r2 = new Rectangle({length: 20, width: 90});
    var r3 = new Rectangle({length: 50, width: 60});
    //output information
    console.log("r1长方形面积为: " + r1.area());
    console.log("r1长方形周长为: " + r1.perimeter());
    console.log("r2长方形面积为: " + r2.area());
    console.log("r2长方形周长为: " + r2.perimeter());
    console.log("r3长方形面积为: " + r3.area());
    console.log("r3长方形周长为: " + r3.perimeter());
</script>
</body>
</html>


CTF-Web学习笔记:服务端请求伪造(SSRF)篇 本文系统介绍了CTF比赛中SSRF漏洞的攻防技术。首先解析了SSRF的核心原理,即利用服务器对用户输入URL的未校验缺陷,诱导其访问内网资源。然后详细分析了5类常见CTF题型:文件读取、内网探测、云服务元数据窃取、协议绕过及组合漏洞利用。重点讲解了绕过URL过滤、利用特殊协议(如dict://、gopher://)等实战技巧,并通过一道SSRF+Redis的高阶题目演示完整攻击链。最后给出防御建议:严格校验输入URL、禁用危险协议、实施内网隔离等。 阅读详情

相关推荐

IFIX往Mysql数据库同步数据方法

通过IFix数据库向Mysql数据库同步数据

仙人掌 1597

javascript -- 创建对象 原型模式

   每个函数都会创建一个 prototype 属性, 这个属性是一个对象, 包含应该由特定引用类型的实例共享的属性和方法。 实际上,这个对象就是通过调用构造函数创建的对象的原型。    使用原型对象的好处是, 在它上面定义的属性和方法可以被对象实例共享。 原来在构造函数中直接赋值给对象实例的值, 可以直接赋值给它们的原型, 如下所示: function Person() {} Person.prototype.name = "Jin"; Person.prototype.age = 18; Person.

一个憨憨的前端之路 941

安时积分法和开路电压法结合估算锂电池SOC

基于安时积分法和开路电压法结合的锂电池SOC估计Simulink仿真建模,利用安时积分法计算放电过程中的SOC,在搁置状态利用开路电压法进行SOC修正。

qq_39304296的博客 2561

js 获取原型的方法

js中获取实例的原型一共存在三种方法。 一、Object.getPrototypeOf()方法 class Person {} let p1 = new Person() Object.getPrototypeOf(p1) === Person.prototype 二、proto class Person {} let p1 = new Person() p1.__proto__ === Person.prototype 三、constructor.prototype class Person {}

weixin_47450807的博客 3812

手势控制 Python !Leap Motion Python 开发教程 (二)

手势控制 Python !Leap Motion Python 开发教程 (二) 现在进入正题,我来给大家总结一下我在使用 Leap Motion 开发过程中的经验以及学到的东西,其中我会概括以及翻译官方给出的注释,为了让这些注释更加通俗易懂,让大家更好理解。 回顾 在上一篇文章中我们讲了如何配置 Leap Motion 的 Python 2.7 的开发环境,如果您还没有配置好您的开发环境,可以参...

成畅的博客 3195

别再只看OPLS-DA得分图了!R2Y和Q2Y到底怎么看?一次讲透代谢组学模型验证

刚接触代谢组学数据分析的研究者,往往会被OPLS-DA得分图中清晰的分组效果所吸引,迫不及待地认为发现了显著差异。这种"看图说话"的冲动,恰恰是许多科研新手在审稿或项目汇报中遭遇质疑的根源。真正专业的分析,需要穿透图形表象,深入理解模型验证指标R2Y和Q2Y背后的统计学意义。

weixin_28683391的博客 177

Array类型

Array类型

weixin_43554610的博客 292

华为OD机试 - 名字的漂亮度(Java 牛客练习题)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个不同字母拥有相同的“漂亮度”。给出一个字符串,该字符串仅由小写字母组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。给出多个字符串,计算每个字符串最大可能的“漂亮度”。第一行一个整数N,接下来N行每行一个字符串。数据范围:输入的名字长度满足。每个字符串可能的最大漂亮程度。

学Java,找哪吒 1786

JS 原型方法

如果第6行代码被注释,在构造函数上虽然定义了属性pname的属性值为‘小米’,但第七行在实例对象的.__proto__又重新定义了pname,覆盖了构造函数原型对象上的pname属性值,因此输出。== obj的构造函数.prototype (obj为普通对象,也叫实例对象,它由obj的构造函数所实例化出来的)因此,只要在构造函数的prototype上添加了属性或方法,由该构造函数实例化出来的对象都能使用该属性或方法。数组的方法保存于Array.prototype上。所有函数有.prototype与.

qq_52731478的博客 170

【新能源汽车DCDC变换器测试优化全攻略:解决电能质量/发热/过充等核心痛点】

高压直流转12V低压的DCDC变换器是新能源汽车电源系统的核心枢纽,承担着为整车低压附件、控制器及12V蓄电池供电/补电的关键作用。在新能源汽车乘用车、商用车等不同车型实际运营中,因PDU内DC/AC等模块干扰、DCDC自身设计缺陷、整车匹配性不佳及测试验证不充分,频发12V输出电能质量差导致后端元器件烧毁、变换器发热严重、蓄电池过充/欠充、智能补电功能失效等问题,还伴随低压侧电压瞬跌/浪涌、电磁干扰超标、振动后接触不良、高温下效率骤降等行业高频故障,直接影响整车可靠性和运营安全性。本文基于国标。

优快云-新能源汽车研发测试专业博主 1270

RK3588平台开发系列讲解(USB篇)UAC初识

📢本篇将介绍RK3588平台`UAC`的配置使用。

内核笔记 3886

JS中的原型和原型链(图解)

JS中的原型和原型链 讲原型的时候,我们应该先要记住以下几个要点,这几个要点是理解原型的关键: 1、所有的引用类型(数组、函数、对象)可以自由扩展属性(除null以外)。 2、所有的引用类型都有一个’_ _ proto_ _’属性(也叫隐式原型,它是一个普通的对象)。 3、所有的函数都有一个’prototype’属性(这也叫显式原型,它也是一个普通的对象)。 ...

qq_36996271的博客 5万+

损失函数大汇总(六十一)(Signed Distance Map Loss附公式推导与代码)

摘要 本文介绍了Signed Distance Map (SDM) Loss,一种将形状先验直接融入分割任务的方法。SDM将每个像素表示为到目标边界的带符号距离(内部为负,外部为正),相比二值mask能更连续地表达形状几何信息。SDM Loss的核心思想是让网络学习这个隐式形状场,通过可微的Heaviside函数近似将SDM转换为分割结果。文中重点分析了一种product-based regression loss,它能同时关注距离数值和内外符号的正确性,对边界区域尤为敏感。SDM Loss通常与传统的分割

悦学共鸣,温柔以待,汇聚光芒,共同成长 189

JavaScript高级之创建对象的六种方式

JavaScript是一种面向对象的程序设计语言,既然是面向对象,那么就一定存在去创建对象,本文就主要深入学习下创建对象的六种方式。一、Object构造函数这种方式我也称之为:基于已有对象扩充其属性和方法创建对象。代码如下:图1:Object构造函数创建对象这种创建对象的方式比较简单,是基于已经存在的Object对象来去扩展属性和方法,但是缺点也很明显,就是如果需要大量的同类对象就意味着大量的重复...

smile_lg的博客 398

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

到底什么是JS原型

话说在前头,去网上查询很多关于JS原型的解释的文章,其中有80%看了都会不知所云,大多数关于JS原型的解释的文章或者视频,都忽略了很多读者对一些专业名词、概念是不掌握的,或许你说的一句话,就可以绕晕读者,导致大家走了很多很多弯路。在这里先分享我查到的一篇关于JS原型的解释,是最通俗易懂的,地址。 一、首先大家在对JS原型进行解释的时候,会涉及两个概念:构造函数、原型对象 1.构造函数:通俗的一...

weixin_38654336的博客 3万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Js创建对象的六种方法

Js创建对象的六种方法 第一种 new 操作符 + Object 创建对象 var person = new Object(); 第二种 字面式创建对象 var person ={ name: "lisi", age: 21, family: ["lida","lier","wangwu"], say: function(){ alert(this.name); } }; 以上两种方#法在使用

weixin_52139094的博客 489

深度学习工具包 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")

JavaScript创建对象的六种方法

JavaScript创建对象的六种方法 字面量方式(很常用) var person = { name: "linyouyou", age: 22, say: function() { alert(this.name) } } var person2 = {} person2.name: "zhangsan" person2.age: 26 person2.say: function() { alert(this.name) } new 操作符 +

N4R4KU的博客 414

Object-创建对象常用的六种方法

Object-创建对象常用的六种方法 话不多说,上代码!!! <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>创建对象的常用的6种方法</title> </head

yuan_xiaoxin的博客 2364

js创建对象的六种方法

       我们可以利用JavaScript的语法特征,以类的思想来创建对象。方法一:原始方法代码如下:[javascript] view plain copy&lt;script&gt;      var obj = new Object();      obj.name = "Kitty";//为对象增加属性      obj.age = 21;      obj.showName = fu...

Djj_Alice的博客 302

JS创建对象的六种方式

JavaScript是一种面向对象的程序设计语言,既然是面向对象,那么就一定存在去创建对象,本文就主要深入学习下创建对象的六种方式。 一、Object构造函数 这种方式我也称之为:基于已有对象扩充其属性和方法创建对象。代码如下: 这种创建对象的方式比较简单,是基于已经存在的Object对象来去扩展属性和方法,但是缺点也很明显,就是如果需要大量的同类对象就意味着大量的重复性的代码,效率不高。 二、...

weixin_45931321的博客 537

JS原型及原型链

以上就是JS的原型、原型链的全部内容。其中这个知识点应用到了Vue中的vm和vc关系,因此我们必须了解这些知识。

casually的博客 1046

js创建对象的方法总结

1. 对象字面量方式 var person = { name: "XiaoMing", age: 29, job: "Software Engineer", sayName: function () { alert(this.name) } 2.object构造函数 var person = new Object(); person.name = "X...

qj6837的博客 3218

【JavaScript】js中的原型继承

js中的原型继承

南栀的博客 3705

Javascript原型链详解,一文带你彻底搞懂js原型、原型对象及原型链

原型链是 JavaScript 中的一个重要特性,它是实现对象之间继承关系的机制。在 JavaScript 中,每个对象都有一个原型属性,指向另一个对象。当试图访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript 引擎会沿着原型链向上查找,直到找到对应的属性或方法为止。

greatming666的博客 2110

Js创建对象的方法及原型链的分析

一.JS创建对象的几种方式 最近在看javascript高级程序设计,其中对对象的创建做了具体的阐述,可以进行总结一下。 第1种模式:工厂方式 var sayHello=function(){ return "Hello"; }; function student(){ var S1 = new Object()...

优快云641963084的博客 233

JavaScript创建对象的四种方法,原型与原型链

1.创建对象: 1.字面量法: var xm={name:"小明",age:18,sex:"男",eat:function(){ } }; 2.通过Object创建对象: var ly=new Object(); ly.name="莉莉娅"; ly.age=18; 3.构造函数创建对象: function Person(name,age,sex){ this.name=name; this.age=age; this.sex=sex; this.

yangaoyuan1999的博客 568
上一篇: JavaScript对象字面量的诸多细节问题以及属性名易错集锦
下一篇: JavaScript对象字面量和构造函数详解
风或许自媒体
博客等级 码龄12年 76粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值