js原型初窥-伪类模式

  JavaScript中是没有类的

一.JavaScript 语言本身是没有类的,js类是通过对象模拟的。
二.JavaScript 的对象和构造类没有关系

JavaScript 构造函数就是一个伪类模式

在java 中构造函数改变 实例对象也会改变,《java编制思想》中上溯造型、继承 等原理 严格明确了 类与对象的引用关系
然而在JavaScript 中存在的只有对象引用,却没有真实的类。虽然 js都可以模拟出来继承、封装 等原理。

JavaScript 构造函数为什么是一个伪类?

<script type="text/javascript">
		function Preson(){}
		var p1 = new Preson();
		Preson.prototype = {name : 'liu'}//修改Preson实例对象的原型对象
	Preson.prototype.constructor = Preson;//把实例对象的原型对象构造指向自己
		var p2 = new Preson();
		console.log(p1.constructor === p2.constructor);//true
		console.log(p1.__proto__ === p2.__proto__);//flase
</script>

1.构造函数的实例在创建时,不是引用。而是完完全全的复制了一遍。

这是我根据上述代码手绘的一张图



Preson构造函数就是自定义构造器,new 出来的实例1,其实和实例 根本不是一种引用关系,可以理解为照着自定义构造器
的模子copy的一份 互不干扰的实例。 当我们修改Preson的prototype其实实例1根本不受任何影响,当我们把实例对象原型的构造
也修改为Preson本身,实例1还是不受任何影响,虽然实例1可以通过constructor找到已经被修改的原型。但是实例1的原型早在被
new出来的时候就已经确定了。 实例2的出现 又是独立的一份。 足以说明JavaScript 的类 继承都是通过对象模拟出来的。所以构造函数就是一个伪类

我会在近2天 总结继承,也会画出底层原型关系图,喜欢的点个关注。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于原型网络的one-shot样本分类的 Matlab 代码如下: ```matlab % 处理训练数据 train_data = load('train_data.mat'); % 加载训练数据 train_data = train_data.train_data; % 获取训练数据 % 计算原型向量 class_num = size(train_data, 1); % 类别数量 feat_dim = size(train_data{1}, 2); % 特征维度 proto_vecs = zeros(class_num, feat_dim); % 始化原型向量 for i = 1:class_num class_data = train_data{i}; % 获取该类别的数据 proto_vecs(i,:) = mean(class_data, 1); % 计算该类别数据的平均值作为原型向量 end % 处理测试数据 test_data = load('test_data.mat'); % 加载测试数据 test_data = test_data.test_data; % 获取测试数据 % 进行one-shot样本分类 correct_num = 0; % 正确分类的样本数量 test_num = size(test_data, 1); % 测试数据的数量 for i = 1:test_num query_data = test_data{i, 1}; % 获取查询样本 query_label = test_data{i, 2}; % 获取查询样本的标签 % 计算查询样本与每个原型向量的相似度 sim_scores = zeros(class_num, 1); % 始化相似度得分 for j = 1:class_num proto_vec = proto_vecs(j,:); % 获取原型向量 sim_scores(j) = dot(query_data, proto_vec) / (norm(query_data) * norm(proto_vec)); % 计算余弦相似度得分 end % 获取最相似的原型向量的标签,作为查询样本的预测标签 [max_score, max_idx] = max(sim_scores); % 获取最大得分及其对应的索引 pred_label = max_idx; % 预测标签即为最大得分的原型向量的索引 % 判断预测标签是否正确,并统计正确分类的样本数量 if pred_label == query_label correct_num = correct_num + 1; end end % 输出准确率 accuracy = correct_num / test_num; fprintf('Accuracy: %.2f%%\n', accuracy * 100); ``` 其中,`train_data.mat` 和 `test_data.mat` 分别为训练数据和测试数据,每个文件中包含一个名为 `train_data` 或 `test_data` 的变量,该变量为一个 cell 数组,每个元素表示一个类别的数据,其中第一列为特征数据,第二列为标签。例如: ```matlab % train_data.mat 文件内容示例 train_data = { [1.2, 3.4, 5.6; 2.3, 4.5, 6.7; ...], % 第一类别的特征数据 [0.9, 2.1, 3.4; 1.8, 3.2, 4.6; ...], % 第二类别的特征数据 ... }; ``` 注意,该代码仅为示例代码,具体实现可能需要根据具体情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值