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.

  1. x: 0, y: -3,
    postNum: 8,
    connectionsTo: 10

  2. x: 6, y: 8,
    postNum: 9,
    connectionsTo: 10

  3. x: -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.

  1. Any fence posts with an even ‘y’ coordinate have a birdhouse, and therefore have a numBirds property initially set to 0.
  2. Any fence posts connected to Post #9, but are not Post #9, have a property of weathervane initially set to “N”.
  3. 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()的更多相关文章

  1. Object.create() __https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/create

    Object.create() 方法会使用指定的原型对象及其属性去创建一个新的对象. 语法 Object.create(proto[, propertiesObject]) 参数 proto 新创建对 ...

  2. javascript的创建对象object.create()和属性检测hasOwnPrototype()和propertyIsEnumerable()

    Object.create("参数1[,参数2]")是E5中提出的一种新的对象的创建方式. 第一个参数是要继承到新对象原型上的对象; 第二个参数是对象属性.这个参数可选,默认为fa ...

  3. Object.create

    var emptyObject = Object.create(null); var emptyObject = Object.create(null); var emptyObject = {}; ...

  4. 前端开发者进阶之ECMAScript新特性【一】--Object.create

    Object.create(prototype, descriptors) :创建一个具有指定原型且可选择性地包含指定属性的对象 参数:prototype 必需.  要用作原型的对象. 可以为 nul ...

  5. firefox-Developer开发者站点——关于Object.create()新方法的介绍

    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/create Objec ...

  6. js-new、object.create、bind的模拟实现【转载备忘】

    //创建Person构造函数,参数为name,age function Person(name,age){ this.name = name; this.age = age; } function _ ...

  7. js Object.create 初探

    1.作用 Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__. https://developer.mozilla.org/zh-CN/docs/W ...

  8. ECMAScript新特性【一】--Object.create

    Object.create(prototype, descriptors) :创建一个具有指定原型且可选择性地包含指定属性的对象 参数: prototype 必需.  要用作原型的对象. 可以为 nu ...

  9. ES5 Object.create 方法

    Object.create(proto[, propertiesObject])The Object.create() method creates a new object with the spe ...

随机推荐

  1. android setContentView

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha setContentView  这个 就是 设置内容视图. 装饰视图 DecorView ...

  2. Struts2 (下)

    接收参数 当发送一个请求时,除了使用RequestApi来接收参数之外,Struts2内部提供了3种接收参数的方式 接收参数的方式 1. 提供属性set方法的方式 在Action当中提供对应属性的se ...

  3. hdu 2197 推公式

    题意:由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个长为n(n<=100000000)的本原串?答案mod2008.例如,100100不是本原串,因为他是由两 ...

  4. Android 中点击返回键弹出“在按一次退出程序”的做法

    在很多应用中都有这种做法,连续点击两次才退出程序,目的是为了防止用户不小心点击到了返回键而退出程序了,添加了一次用户确认的过程. 其实做法很简单,只需要做一个延时的消息处理就可以了. 首先在我们在一个 ...

  5. w​x​F​o​r​m​B​u​i​l​d​e​r​初​体​验

    第一步 打开wxFormBuilder 修改工程信息并保存工程 Name: 工程名 File: 生成代码(.py)文件名 Code_generation: 生成代码类型 第二步 创建窗体 切换至for ...

  6. offset大家族(一)

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. PostgreSQL控制台以竖行显示

    \x select * from user; 这个和MySQL的有点区别,在查询之前使用\x进行显示的开启 注意:只需要用一次即可,以后的查询都是以竖行进行显示.

  8. 丢失或损坏NDF文件如何附加数据库

    在论坛看到有人遇到 NDF文件丢失并且没有备份,所以无法成功附加数据库.在网上也看到过很多回答是如果没有NDF就无法附加成功. 其实我自己测试下来即使没有NDF也是可以成功附加的.但是有条件,丢失的N ...

  9. java基础学习总结——方法的重载(overload)

    一.方法的重载 方法名一样,但参数不一样,这就是重载(overload). 所谓的参数不一样,主要有两点:第一是参数的个数不一样,第二是参数的类型不一样.只要这两方面有其中的一方面不一样就可以构成方法 ...

  10. datagrid在MVC中的运用03-选择单行或多行

    本文体验datagrid显示单行或多行内容.分别用到了datagrid的getSelected,getSelections方法. Html部分 <a href="#" cla ...