23
WinJS Classes and Namespaces What are WinJS and WinRT, Using the APIs in JavaScript George Georgiev Telerik Software Academy academy.telerik.com Technical Trainer itgeorge.net

WinJS Classes and Namespaces

  • Upload
    duyen

  • View
    76

  • Download
    0

Embed Size (px)

DESCRIPTION

WinJS Classes and Namespaces. What are WinJS and WinRT, Using the APIs in JavaScript. George Georgiev. Telerik Software Academy. academy.telerik.com. Technical Trainer. itgeorge.net. Table of Contents. Defining Classes with WinJS Constructor, instance & static members Properties - PowerPoint PPT Presentation

Citation preview

Page 1: WinJS  Classes and Namespaces

WinJS Classes and Namespaces

What are WinJS and WinRT, Using the APIs in JavaScript

George Georgiev

Telerik Software Academyacademy.telerik.com

Technical Traineritgeorge.net

Page 2: WinJS  Classes and Namespaces

2

Table of Contents Defining Classes with WinJS

Constructor, instance & static members

Properties Deriving Classes with WinJS

Calling the base constructor WinJS Mixins

Defining and using custom mixins Namespaces

Creating, extending and nesting

Page 3: WinJS  Classes and Namespaces

Defining Classes with WinJS

Using WinJS.Class.define()

Page 4: WinJS  Classes and Namespaces

4

Defining Classes in WinJS

WinJS has an API for working with Classes Defining, deriving and mixing

classes WinJS.Class.define() defines a class, given: A constructor function An object defining instance

members Added to the object prototype

An object defining static members Added to object/class itself

Returns the class object

Page 5: WinJS  Classes and Namespaces

Defining Classes in WinJS

Example definition of an Animal class

5

var Animal = WinJS.Class.define(function (name, age, weightKg) { this.name = name; this.age = age; this.weightKg = weightKg; }, { //instance members makeSound: function makeSound() { console.log(this.name + " made a sound"); } }, { //static members getStronger: function (animalA, animalB) { return animalA.weight > animalB.weight ? animalA : animalB; } });…var someAnimal = new Animal("Laika", 10, 20);

Page 6: WinJS  Classes and Namespaces

Defining & Using classes with WinJS

Live Demo

Page 7: WinJS  Classes and Namespaces

7

WinJS Properties in Classes

Properties are accessed as fields, but: Perform functions on getting their

value Perform functions on setting their

value WinJS can create properties in a Class Based on Object.defineProperty() Requires get and set functions to be

provided getter should return property value setter receives a value to set Useful to validate and notify of

changes

Page 8: WinJS  Classes and Namespaces

WinJS Properties in Classes

Example property definition

8

var Animal = WinJS.Class.define(function (name, age, weightKg){ this._name = name; this.age = age; this.weightKg = weightKg;}, { name: { get: function () { return this._name; }, set: function (val) { var oldName = this._name; this._name = val; console.log(oldName+"'s name changed to: "+this._name); } }, descriptionStr: {get: function(){return "name:" + this.name + ", age:" + this.age + ", weight:" + this.weightKg + "kg"; } },});

Page 9: WinJS  Classes and Namespaces

WinJS Properties in Classes

Live Demo

Page 10: WinJS  Classes and Namespaces

Deriving (inheriting) Classes with WinJS

Using WinJS.Class.derive()

Page 11: WinJS  Classes and Namespaces

11

Inheriting Classes in WinJS

Class inheritance – deriving from the "parent" WinJS.Class.derive() receives

Parent Constructor Instance members Static members

Deriving a class DOESN'T call base constructor Need to call it manually Especially if base constructor

initializes members

Page 12: WinJS  Classes and Namespaces

Inheriting Classes in WinJS

Example deriving of Bear and Mammoth from Animal class

12

var Bear = WinJS.Class.derive(Animal, function () { Animal.apply(this, arguments);}, { eatHoney: function () { console.log(this.name + " ate some honey"); }})...var Mammoth = WinJS.Class.derive(Animal, function () { Animal.apply(this, arguments);}, { goExtinct: function () { this.name = "[extinct]" + this.name; }})

Page 13: WinJS  Classes and Namespaces

Inheriting Classes with WinJS

Live Demo

Page 14: WinJS  Classes and Namespaces

WinJS MixinsDefining and using a mixin to

extend objects

Page 15: WinJS  Classes and Namespaces

15

WinJS Mixins JavaScript objects – bags of properties Easy to extend by adding more

properties Mixins – objects used to augment others Group of properties serving a

certain purpose e.g. event handling, data binding

Not used directly Mixed into other objects

WinJS.Class.mix() receives objects to mix Returns the mixed object

Page 16: WinJS  Classes and Namespaces

Creating and Using a Mixin with WinJS

Live Demo

Page 17: WinJS  Classes and Namespaces

NamespacesOrganizing code with Namespaces

Page 18: WinJS  Classes and Namespaces

18

Namespaces Namespaces in JavaScript are actually objects Used "as if" they are just collections

of objects Contain other objects Should be extensible and nestable

WinJS.Namespace.define() takes Name of the namespace (string) Set of objects to include Creates a global object

Given name as identifier with given properties

Or adds the properties if the namespace exists

Page 19: WinJS  Classes and Namespaces

Namespaces WinJS.Namespace.defineWithParent() takes The parent namespace as an object

NOT a string (very easy to mistake) Name of the namespace (string) Set of objects to include Creates a object inside the given

parent Given name as identifier with given

properties Or adds the properties if the

namespace exists

19

Page 20: WinJS  Classes and Namespaces

Namespaces Two namespaces with objects referencing the parent namespace

20

WinJS.Namespace.define("AnimalKingdom", { Animal : WinJS.Class.define(...)});...WinJS.Namespace.defineWithParent( AnimalKingdom, "Mammals", { Bear: WinJS.Class.derive(AnimalKingdom.Animal, ...), Mammoth: WinJS.Class.derive(AnimalKingdom.Animal, ...) }}...

var someBear = new AnimalKingdom.Mammals.Bear(...);

Page 21: WinJS  Classes and Namespaces

Organizing code with Namespaces

Live Demo

Page 22: WinJS  Classes and Namespaces

форум програмиране, форум уеб дизайнкурсове и уроци по програмиране, уеб дизайн – безплатно

програмиране за деца – безплатни курсове и уроцибезплатен SEO курс - оптимизация за търсачки

уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop

уроци по програмиране и уеб дизайн за ученициASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC

безплатен курс "Разработка на софтуер в cloud среда"

BG Coder - онлайн състезателна система - online judge

курсове и уроци по програмиране, книги – безплатно от Наков

безплатен курс "Качествен програмен код"

алго академия – състезателно програмиране, състезанияASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NET

курсове и уроци по програмиране – Телерик академия

курс мобилни приложения с iPhone, Android, WP7, PhoneGapfree C# book, безплатна книга C#, книга Java, книга C# Дончо Минков - сайт за програмиране

Николай Костов - блог за програмиранеC# курс, програмиране, безплатно

?? ? ?

??? ?

?

? ?

??

?

?

? ?

Questions?

?

WinJS Classes and Namespaces

http://academy.telerik.com

Page 23: WinJS  Classes and Namespaces

Exercises1. Implement a hierarchy of classes,

describing vegetables. A vegetable has color and some vegetables can be directly eaten, some can not. A tomato is a kind of vegetable which has a radius and can be eaten directly. A cucumber is a vegetable which has a length and cannot be eaten directly.

2. Implement a mushroom mixin. A mushroom mixin enables an object to grow by given an amount of water. Use the mixin to create a TomatoGmo and a CucumberGMO.

3. Group the classes in the previous exercises into namespaces – there should be no classes in the global namespace