Successfully reported this slideshow.
Firefox 4   JavaScript / Narcissus Асен Божилов   http://asenbozhilov.com
 
Object API
Object API Object. defineProperty Object. getOwnPropertyDescriptor Object. defineProperties Object. getPrototypeOf Object....
var  foo = { bar  :  true }; for  ( var  i  in  foo) { console. log (i);  //bar  } foo.bar =  false ;  //Присвояване на но...
Object. defineProperty  (obj, prop, desc)
var  foo = {}; Object. defineProperty (foo,  'bar' , { value  :  'baz' , enumerable  :  true , writable  :  true , configu...
// [[Value]]  var  foo = {}; Object. defineProperty (foo,  'bar' , { value  :  'baz' , enumerable  :  true , writable  :  ...
// [[ E numerable ]]  var  foo = {}; Object. defineProperty (foo,  'bar' , { value  :  'baz' , enumerable  : true , writab...
// [[Writable]]  var  foo = {}; Object. defineProperty (foo,  'bar' , { value  :  'baz' , enumerable  :  true , writable  ...
// [[Configurable]]  var  foo = {}; Object. defineProperty (foo,  'bar' , { value  :  'baz' , enumerable  :  true , writab...
// Setter and Getter var  foo = {}; ( function  () { var  _private; Object. defineProperty (foo,  'bar' , { set  :  functi...
// Стойности по подразбиране var  foo = {}; Object. defineProperty (foo,  'bar' , { value  :  'baz' });
/ / Стойности по подразбиране
// Стойности по подразбиране var  foo = {}; Object. defineProperty (foo,  'bar' , { value  :  'baz' }); for  ( var  i  in ...
Object. getOwnPropertyDescriptor  (obj, prop)
//Object.getOwnPropertyDescriptor var  foo = {bar :  true }, desc  = Object. getOwnPropertyDescriptor (foo,  'bar' ); cons...
Object. defineProperties  (obj, properties)
//Object.defineProperties var  foo = {}; Object. defineProperties (foo, { bar  : { value  :  true , enumerable  :  true , ...
/ /Object.defineProperties var  foo = {}, properties  = { bar  : { value  :  true , enumerable  :  true , writable  :  fal...
//Наследяване и използване на [[Prototype]] var  foo = {}; console. log ( typeof  foo.hasOwnProperty);  //function console...
//Наследяване и използване на [[Prototype]] var  foo = { [[Prototype]] : Object. prototype };
Object. getPrototypeOf  (obj)
//Object.getPrototypeOf var  foo = {}; Object. getPrototypeOf (foo) === Object. prototype ;  //true
/ /Итериране през прототипната верига на обект function   getValueOf (obj, prop) { var  hasOwnProp = Object. prototype .ha...
Object. create  (proto [, properties ])
//Object.create var  foo = {a :  10 , b :  20 }; var  bar = Object. create (foo); console. log (bar.a);  //10 console. log...
//Object.create /* * Създава се обект, който е на върха на прототипната си верига. * За стойност на [[Prototype]] има null...
Object. keys  (obj)
//Object.keys var  obj = { foo  :  1 , bar  :  2 }; /* * Дефиниране на свойство с [[Enumerable]] атрибут false */ Object. ...
Object. getOwnPropertyNames  (obj)
//Object.getOwnPropertyNames var  obj = { foo  :  1 , bar  :  2 }; /* * Дефиниране на свойство което има [[Enumerable]] ат...
Object. preventExtensions  (obj)  /  Object. isExtensible  (obj)
//Object.preventExtensions / Object.isExtensible var  foo = { bar  :  1 ,  baz  :  2 }; /*   * Object.preventExtensions * ...
//Object.preventExtensions / Object.isExtensible var  foo = {}, bar  = {}; Object. preventExtensions (foo); console. log (...
Object. seal  (obj)  /  Object. isSealed  (obj)
// Object.seal / Object.isSealed var  foo = { bar  :  1 ,  baz  :  2 }; /*  *  - спира премахването на текущите свойства о...
// Object.seal / Object.isSealed var  foo = {}, bar  = {}; Object. seal (foo); console. log (Object. isSealed (foo));  //t...
Object. freeze  (obj)  /  Object. isFrozen  (obj)
// Object.freeze / Object.isFrozen var  foo = { bar  :  1 ,  baz  :  2 }; /* *  - предотвратява премахването на текущите с...
// Object.freeze / Object.isFrozen var  foo = {}, bar  = {}; Object. freeze (foo); console. log (Object. isFrozen (foo)); ...
Narcissus
Narcissus <ul><li>Open source  JavaScript интерпретатор
Написан на JavaScript
Поддръжка на бъдещи разширения на JavaScript
Интеграция в Firefox 4 чрез разширението  Zaphod </li></ul>
Upcoming SlideShare
Loading in …5
×

OpenCamp Sofia

876 views

Published on

Published in: Technology, Business
  • Be the first to comment

OpenCamp Sofia

  1. 1. Firefox 4 JavaScript / Narcissus Асен Божилов http://asenbozhilov.com
  2. 3. Object API
  3. 4. Object API Object. defineProperty Object. getOwnPropertyDescriptor Object. defineProperties Object. getPrototypeOf Object. create Object. keys Object. getOwnPropertyNames Object. freeze Object. isFrozen Object. preventExtensions Object. isExtensible Object. seal Object. isSealed
  4. 5. var foo = { bar : true }; for ( var i in foo) { console. log (i); //bar } foo.bar = false ; //Присвояване на нова стойност console. log (foo.bar); //false console. log ( delete foo.bar); //true
  5. 6. Object. defineProperty (obj, prop, desc)
  6. 7. var foo = {}; Object. defineProperty (foo, 'bar' , { value : 'baz' , enumerable : true , writable : true , configurable : false });
  7. 8. // [[Value]] var foo = {}; Object. defineProperty (foo, 'bar' , { value : 'baz' , enumerable : true , writable : true , configurable : false }); console. log (foo.bar); //baz
  8. 9. // [[ E numerable ]] var foo = {}; Object. defineProperty (foo, 'bar' , { value : 'baz' , enumerable : true , writable : true , configurable : false }); for ( var i in foo) { console. log (i); //bar }
  9. 10. // [[Writable]] var foo = {}; Object. defineProperty (foo, 'bar' , { value : 'baz' , enumerable : true , writable : true , configurable : false }); foo.bar = 'new value' ; console. log (foo.bar); //new value
  10. 11. // [[Configurable]] var foo = {}; Object. defineProperty (foo, 'bar' , { value : 'baz' , enumerable : true , writable : true , configurable : false }); console. log ( delete foo.bar); //false console. log (foo.bar); //new value
  11. 12. // Setter and Getter var foo = {}; ( function () { var _private; Object. defineProperty (foo, 'bar' , { set : function (val) { _private = val; }, get : function () { return _private; } }); })(); foo.bar = 10 ; //Извикване на setter-а foo.bar; //Извикване на getter-а
  12. 13. // Стойности по подразбиране var foo = {}; Object. defineProperty (foo, 'bar' , { value : 'baz' });
  13. 14. / / Стойности по подразбиране
  14. 15. // Стойности по подразбиране var foo = {}; Object. defineProperty (foo, 'bar' , { value : 'baz' }); for ( var i in foo) { console. log (i); //bar няма да бъде изброено от for-in } foo.bar = 'new value' ; console. log (foo.bar); //baz console. log ( delete foo.bar); //false
  15. 16. Object. getOwnPropertyDescriptor (obj, prop)
  16. 17. //Object.getOwnPropertyDescriptor var foo = {bar : true }, desc = Object. getOwnPropertyDescriptor (foo, 'bar' ); console. dir (desc); /* value : true enumerable : true configurable : true writable : true */
  17. 18. Object. defineProperties (obj, properties)
  18. 19. //Object.defineProperties var foo = {}; Object. defineProperties (foo, { bar : { value : true , enumerable : true , writable : false , configurable : false }, baz : { value : false } });
  19. 20. / /Object.defineProperties var foo = {}, properties = { bar : { value : true , enumerable : true , writable : false , configurable : false }, baz : { value : false } }; //Емулация на Object.defineProperties var hasOwnProp = Object. prototype .hasOwnProperty; for ( var i in properties) { if (hasOwnProp. call (properties, i)) { Object. defineProperty (foo, i, properties[i]); } }
  20. 21. //Наследяване и използване на [[Prototype]] var foo = {}; console. log ( typeof foo.hasOwnProperty); //function console. log (foo. hasOwnProperty ( 'hasOwnProperty' )); //false console. log (Object. prototype . hasOwnProperty ( 'hasOwnProperty' )); //true
  21. 22. //Наследяване и използване на [[Prototype]] var foo = { [[Prototype]] : Object. prototype };
  22. 23. Object. getPrototypeOf (obj)
  23. 24. //Object.getPrototypeOf var foo = {}; Object. getPrototypeOf (foo) === Object. prototype ; //true
  24. 25. / /Итериране през прототипната верига на обект function getValueOf (obj, prop) { var hasOwnProp = Object. prototype .hasOwnProperty; do { if (hasOwnProp. call (obj, prop)) { return obj[prop]; } } while ( obj = Object. getPrototypeOf (obj) ); //Ако свойство с подаденото име не съществува в прототипната верига се връща стойност undefined return undefined; } var foo = {bar : 10 }; console. log (foo.bar); //10 console. log ( getValueOf (foo, 'bar' )); //10 console. log (foo.foo); //undefined console. log ( getValueOf (foo, 'foo' )); //undefined
  25. 26. Object. create (proto [, properties ])
  26. 27. //Object.create var foo = {a : 10 , b : 20 }; var bar = Object. create (foo); console. log (bar.a); //10 console. log (bar.b); //20 Object. getPrototypeOf (bar) === foo; //true
  27. 28. //Object.create /* * Създава се обект, който е на върха на прототипната си верига. * За стойност на [[Prototype]] има null и не наследява свойства. */ var map = Object. create ( null );
  28. 29. Object. keys (obj)
  29. 30. //Object.keys var obj = { foo : 1 , bar : 2 }; /* * Дефиниране на свойство с [[Enumerable]] атрибут false */ Object. defineProperty (obj, 'baz' , {value : 3 }); /* * Взимане на масив с имената на всички изброими собствени свойства * Object.keys не попълва масива с наследени свойства */ Object. keys (obj); //[&quot;foo&quot;, &quot;bar&quot;]
  30. 31. Object. getOwnPropertyNames (obj)
  31. 32. //Object.getOwnPropertyNames var obj = { foo : 1 , bar : 2 }; /* * Дефиниране на свойство което има [[Enumerable]] атрибут false */ Object. defineProperty (obj, 'baz' , {value : 3 }); /* * Взимане на масив с имената на всички собствени свойства, независимо дали са изброими или не * Object.getOwnPropertyNames не попълва масива с наследени свойства */ Object. getOwnPropertyNames (obj); //[&quot;foo&quot;, &quot;bar&quot;, &quot;baz&quot;]
  32. 33. Object. preventExtensions (obj) / Object. isExtensible (obj)
  33. 34. //Object.preventExtensions / Object.isExtensible var foo = { bar : 1 , baz : 2 }; /* * Object.preventExtensions * - спира добавянето на нови свойства в обекта */ Object. preventExtensions (foo); foo.newProperty = 3 ; console. log (foo.newProperty); //undefined
  34. 35. //Object.preventExtensions / Object.isExtensible var foo = {}, bar = {}; Object. preventExtensions (foo); console. log (Object. isExtensible (foo)); //false console. log (Object. isExtensible (bar)); //true
  35. 36. Object. seal (obj) / Object. isSealed (obj)
  36. 37. // Object.seal / Object.isSealed var foo = { bar : 1 , baz : 2 }; /* * - спира премахването на текущите свойства от обекта * - не могат да бъдат добавяни нови свойства на обекта */ Object. seal (foo); console. log ( delete foo.bar); //false foo.newProperty = 3 ; console. log (foo.newProperty); //undefined /* * Текущите стойности на свойствата могат да бъдат променени */ foo.bar = 6 ; console. log (foo.bar); //6
  37. 38. // Object.seal / Object.isSealed var foo = {}, bar = {}; Object. seal (foo); console. log (Object. isSealed (foo)); //true console. log (Object. isSealed (bar)); //false
  38. 39. Object. freeze (obj) / Object. isFrozen (obj)
  39. 40. // Object.freeze / Object.isFrozen var foo = { bar : 1 , baz : 2 }; /* * - предотвратява премахването на текущите свойства * - не могат да бъдат добавяни нови свойства * - текущите стойности на свойствата НЕ могат да бъдат променяни */ Object. freeze (foo); console. log ( delete foo.bar); //false foo.newProperty = 3 ; console. log (foo.newProperty); //undefined foo.bar = 6 ; console. log (foo.bar); //1
  40. 41. // Object.freeze / Object.isFrozen var foo = {}, bar = {}; Object. freeze (foo); console. log (Object. isFrozen (foo)); //true console. log (Object. isFrozen (bar)); //false
  41. 42. Narcissus
  42. 43. Narcissus <ul><li>Open source JavaScript интерпретатор
  43. 44. Написан на JavaScript
  44. 45. Поддръжка на бъдещи разширения на JavaScript
  45. 46. Интеграция в Firefox 4 чрез разширението Zaphod </li></ul>
  46. 47. Изпълнение на единичен скрипт през Narcissus <script type = &quot;application/narcissus&quot; > //... </script> <script type = &quot;text/narcissus&quot; > //... </script> Изполване на Narcissus?
  47. 48. Изпълнение на всички скриптове в страницата през Narcissus. (независимо от type атрибута им) <meta http-equiv = &quot;Content-Script-Type&quot; content = &quot;application/narcissus&quot; > <meta http-equiv = &quot;Content-Script-Type&quot; content = &quot;text/narcissus&quot; > Изполване на Narcissus?
  48. 49. Конец Автор: Асен Божилов Благодарности на: Dmitry Soshnikov

×