Sunday, May 15, 2016

__proto__never_changes

var Foo = function Foo(){};
Foo.prototype.x = 1;
var FooInstance = new Foo();
console.log(FooInstance.x); // logs 1, as you think it would

//now let’s replace/override the prototype object with a new Object() object
Foo.prototype = {x:2};
console.log(FooInstance.x); // logs 1: once created, object's __proto__ never changes

// create a new instance of Foo()
var NewFooInstance = new Foo();
console.log(NewFooInstance.x); // logs 2

constructor__is__prop_of_prototype

function Foo(){};
var aFoo = new Foo();
//constructor__is__prop_of_prototype
//aFoo.hasOwnProperty("constructor") is false, aFoo.constructor is actually Foo.prototype.constructor
alert( Foo.prototype.constructor === aFoo.constructor ) // alert "true"

Saturday, May 14, 2016

arguments

var add = function() {
/*
 even though we forgo specifying parameters when defining the function, we
can rely on the arguments array passed to the function to access parameters
*/
 return arguments[0] + arguments[1];
};
console.log(add(4, 4)); // returns 8

Friday, May 13, 2016

吐槽温哥华房产交易

温哥华买房,有几点对买家不利:

  • 竞价机制 一般来说,卖方会出一个比政府估价高很多的价格,在这个价格之上,各买家出价,第一次竞价已经把房价炒到很高了,但是买家还可以加价,这不尼玛扯吗,怪不得房价这么高。
  • 障碍解除机制 除了在出价上PK之外,买方的offer(购买意愿书)还包括一个障碍清单,这本来是利好买家,可是如果你出的是带条件的offer,卖方就基本不会接受。原本先天属于买家的这种权利就这样被剥夺了!
  • 验房成为一种奢侈 验房是买家的先天权利,在无条件offer中被剥夺。
  • 贷款成为巨大风险 买家在买房的时候不可能知道自己能不能贷到款,而障碍解除机制中你不能把贷不到款作为你的障碍,这样你的定金就可能打水漂。
  • 评估成为一种猫腻 因为在竞价中把房价炒到很高,所以银行很可能不愿意按照那个价格给你贷款,这时候差价你就得自己去凑,凑不到的话定金还是打水漂。买家同样不能把评估风险作为障碍

Wednesday, May 11, 2016

primitive_and_prototype_chain

var i = 10
Object.prototype.foo = 'Foo';
alert( i.foo ) //Foo

i.bar = 'Bar' // No effect: primitive is not extensive in own props
alert( i.bar )// undefined

alert( i.constructor ) // function Number(){}
alert( typeof i.constructor.prototype ) //object

Sunday, May 8, 2016

reference

var myObject = {};
var copyOfMyObject = myObject;
myObject.foo = 'bar';
console.log(myObject, copyOfMyObject); // logs 'Object { foo="bar"} Object { foo="bar"}'

=== operator for js

var price1 = 10;
var price2 = 10;
var price3 = new Number('10');
var price4 = price3;
var price5 = new Number('10');
console.log(price1 === price2); // logs true: primitive values compared by value

console.log(price1 === price3); //logs false: compares object with primitive

console.log(price4 === price3);// logs true: same references

alert("now checking price5...")
console.log(price5 === price3);// logs false: diff references