[Javascript] Prototype 2 Object.create()
function Fencepost (x, y, postNum){
this.x = x;
this.y = y;
this.postNum = postNum;
this.connectionsTo = [];
}
Fencepost.prototype = {
sendRopeTo: function ( connectedPost ){
this.connectionsTo.push(connectedPost);
},
removeRope: function ( removeTo ){
var temp = [];
for(var i = 0; i<this.connectionsTo.length; i++){
if(this.connectionsTo[i].postNum != removeTo){
temp.push(this.connectionsTo[i]);
}
}
this.connectionsTo = temp;
},
movePost: function (x, y){
this.x = x;
this.y = y;
},
valueOf: function (){
return Math.sqrt( this.x*this.x + this.y*this.y );
},
toString: function(){
var list = this.connectionsTo.map(function(each){
return each.postNum + "\n";
});
return 'Fence post #'+this.postNum+":\n"+
'Connected to posts:'+
list+"\n"+
'Distance from ranch: '+this.valueOf()+
' yards'; }
};
var genericPost =
{x: 0, y: 0, postNum: undefined,
connectionsTo: undefined,
sendRopeTo: function ( connectedPost ) {
if(this.connectionsTo == undefined){
var postArray = [ ];
postArray.push(connectedPost);
this.connectionsTo = postArray;
} else {
this.connectionsTo.push(connectedPost);
}
}
};
var post1 = Object.create(genericPost); //将继承genericPost中所有的属性
var post2 = Object.create(genericPost);
post1.x = -2;
post1.y = 4;
post1.postNum = 1;
post2.x = 5;
post2.y = 1;
post2.postNum = 2;
post1.sendRopeTo(post2);
post2.sendRopeTo(post1);
Below are the data for three posts that need to be created using the genericPost
as a prototype (as in the last challenge). The cowboys have given you all the data you’ll need to build each using the prototype and then assign unique property values through modification. Call each of your posts post<number>
, just like you did in the last challenge.
x: 0, y: -3,
postNum: 8,
connectionsTo: 10x: 6, y: 8,
postNum: 9,
connectionsTo: 10x: -2, y: 3,
postNum: 10,
connectionsTo: 8, 9
The cowboy-devs have prepared a list of additions that need to happen for certain special fence posts. After you’ve built the above three posts, add properties to those post where the cowboy-devs have deemed appropriate.
- Any fence posts with an even ‘y’ coordinate have a birdhouse, and therefore have a
numBirds
property initially set to 0. - Any fence posts connected to Post #9, but are not Post #9, have a property of
weathervane
initially set to “N”. - Even numbered fence posts have emergency lights, and a
lightsOn
property initially set to false.
The base fencepost is again provided for your reference. There are many single lines of code to be entered on this one, so be careful to assign all properties necessary.
var genericPost = {
x: 0,
y: 0,
postNum: undefined,
connectionsTo: undefined,
sendRopeTo: function ( connectedPost ) {
if(this.connectionsTo == undefined){
var postArray = [ ];
postArray.push(connectedPost);
this.connectionsTo = postArray;
} else {
this.connectionsTo.push(connectedPost);
}
}
};
var post8 = Object.create(genericPost);
var post9 = Object.create(genericPost);
var post10 = Object.create(genericPost);
post8.x = 0;
post8.y = -3;
post8.postNum = 8;
post8.sendRopeTo(post10);
post9.x = 6;
post9.y = 8;
post9.postNum = 9;
post9.sendRopeTo(post10);
post10.x = -2;
post10.y = 3;
post10.postNum = 10;
post10.sendRopeTo(post8);
post10.sendRopeTo(post9);
post9.numBirds = 0;
post10.weathervane = "N";
post8.lightsOn = false;
post10.lightsOn = false;
So now that’s there’s eleventy-billion fence posts everywhere, the cowboy-devs have noticed a significant drain on their memory resources. They’d like you to take a look around the Fencepost constructor and see if there’s anything you can add to a prototype, so that every stinkin’ fence post doesn’t have to carry around anything that it could get from just one place.
Below is the current status of the constructor, with some additions the cowboy-devs have made to improve functionality of the fence post objects. Your job is to identify the portions of the constructor that should be available to ALL fenceposts, and put those in a prototype for fence posts. Your answer should include the modified constructor as well as the newly designed prototype for that constructor. Good luck, pardner.
function Fencepost (x, y, postNum){
this.x = x;
this.y = y;
this.postNum = postNum;
this.connectionsTo = [];
this.sendRopeTo = function ( connectedPost ){
this.connectionsTo.push(connectedPost);
};
this.removeRope = function ( removeTo ){
var temp = [];
for(var i = 0; i<this.connectionsTo.length; i++){
if(this.connectionsTo[i].postNum != removeTo){
temp.push(this.connectionsTo[i]);
}
}
this.connectionsTo = temp;
}
this.movePost = function (x, y){
this.x = x;
this.y = y;
};
}
Answer:
function Fencepost (x, y, postNum){
this.x = x;
this.y = y;
this.postNum = postNum;
this.connectionsTo = [];
} Fencepost.prototype = {
sendRopeTo: function ( connectedPost ){
this.connectionsTo.push(connectedPost);
},
removeRope: function ( removeTo ){
var temp = [];
for(var i = 0; i<this.connectionsTo.length; i++){
if(this.connectionsTo[i].postNum != removeTo){
temp.push(this.connectionsTo[i]);
}
}
this.connectionsTo = temp;
},
movePost : function (x, y){
this.x = x;
this.y = y;
};
};
[Javascript] Prototype 2 Object.create()的更多相关文章
- Object.create() __https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/create
Object.create() 方法会使用指定的原型对象及其属性去创建一个新的对象. 语法 Object.create(proto[, propertiesObject]) 参数 proto 新创建对 ...
- javascript的创建对象object.create()和属性检测hasOwnPrototype()和propertyIsEnumerable()
Object.create("参数1[,参数2]")是E5中提出的一种新的对象的创建方式. 第一个参数是要继承到新对象原型上的对象; 第二个参数是对象属性.这个参数可选,默认为fa ...
- Object.create
var emptyObject = Object.create(null); var emptyObject = Object.create(null); var emptyObject = {}; ...
- 前端开发者进阶之ECMAScript新特性【一】--Object.create
Object.create(prototype, descriptors) :创建一个具有指定原型且可选择性地包含指定属性的对象 参数:prototype 必需. 要用作原型的对象. 可以为 nul ...
- firefox-Developer开发者站点——关于Object.create()新方法的介绍
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/create Objec ...
- js-new、object.create、bind的模拟实现【转载备忘】
//创建Person构造函数,参数为name,age function Person(name,age){ this.name = name; this.age = age; } function _ ...
- js Object.create 初探
1.作用 Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__. https://developer.mozilla.org/zh-CN/docs/W ...
- ECMAScript新特性【一】--Object.create
Object.create(prototype, descriptors) :创建一个具有指定原型且可选择性地包含指定属性的对象 参数: prototype 必需. 要用作原型的对象. 可以为 nu ...
- ES5 Object.create 方法
Object.create(proto[, propertiesObject])The Object.create() method creates a new object with the spe ...
随机推荐
- SQLSERVER2014集群实战——IP引发的坑
在之前的帖子里有提到过,为了避免IP变更带来的一系列问题,采取了不改变IP的策略.原以为,只要SQLSERVER的群集IP保持与之前单机部署的IP一致,就基本上不会有问题.然而实际永远比预想的更复杂. ...
- 4、Redis中对List类型的操作命令
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...
- Codeforces Round #257 (Div. 2 ) B. Jzzhu and Sequences
B. Jzzhu and Sequences time limit per test 1 second memory limit per test 256 megabytes input standa ...
- Redis系列之(一):10分钟玩转Redis
1. Redis介绍 Redis是一个开源的使用ANSI C语言编写.基于内存的Key-Value数据库. 它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集 ...
- HDU 4714 Tree2cycle (树形DP)
Tree2cycle Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)Tot ...
- Android字体简述
Android是一个典型的Linux内核的操作系统.在Android系统中,主要有DroidSans和DroidSerif两大字体阵营,从名字就可以看出来,前者是无衬线字体,后者是衬线字体.具体来说, ...
- redhat 6.6 安装 (LVM)
http://www.cnblogs.com/kerrycode/p/4341960.html
- 《TCP/IP具体解释卷2:实现》笔记--ICMP:Internet控制报文协议
ICMP在IP系统间传递差错和管理报文,是不论什么IP实现必须和要求的组成部分.能够把ICMP分成两类:差错和查询.查询报文 是用一对请求和回答定义的.差错报文通常包括了引起错误的IP包的第一个分片的 ...
- 用最简单的例子理解迭代器模式(Iterator Pattern)
迭代器模式的需求来自:需要对一些集合进行迭代,而迭代的方式可能有很多种. 说到迭代,动作大致包括设置第一个位置,获取下一个位置元素,判断是否迭代结束,获取当前位置元素,大致就这么些.把这些迭代动作封装 ...
- BTA 常问的 Java基础40道常见面试题及详细答案
原文:http://www.ymq.io/2018/03/10/java/ 八种基本数据类型的大小,以及他们的封装类 引用数据类型 Switch能否用string做参数 equals与==的区别 自动 ...