Apps in SharePoint 2013/office
365:
I have already covered about the features and benefits of introducing apps in my earlier posts. Please
have a look into it.
Just do copy/paste the below code and execute it.
Note: The below shared code is 100% verified/executed.
Please reach the below post URL to get the hostweb url through REST service
http://sharepointquicksolutions.blogspot.com/2016/12/get-sharepoint-host-web-url-using-rest.htmlAppmanifest.xml:
Set read level permisisons to the web
<p id="getHostWebURL"> </p>
'use strict';
var hostweburl, appweburl;
var website;
$(document).ready(function () {
    appweburl = window.location.protocol + "//" + window.location.host + _spPageContextInfo.webServerRelativeUrl;
    hostweburl = _spPageContextInfo.siteAbsoluteUrl;
    //hostweburl = decodeURIComponent(getQueryStringParameter("SPHostUrl"));
    //appweburl = decodeURIComponent(getQueryStringParameter("SPAppWebUrl"));
    var scriptbase = hostweburl + "/_layouts/15/";
    $.getScript(scriptbase + "SP.Runtime.js",
        function () {
            $.getScript(scriptbase + "SP.js", retrieveListItems);
        }
    );
});
// Function to retrieve a query string value.
// For production purposes you may want to use
// a library to handle the query string.
function getQueryStringParameter(paramToRetrieve) {
    var params =
        document.URL.split("?")[1].split("&");
    var strParams = "";
    for (var i = 0; i < params.length; i = i + 1) {
        var singleParam = params[i].split("=");
        if (singleParam[0] == paramToRetrieve)
            return singleParam[1];
    }
}
function retrieveListItems() {
    var context = new SP.ClientContext(appweburl);
    var appContextSite = new SP.AppContextSite(context, hostweburl);
    website = appContextSite.get_web();
    context.load(website);
    context.executeQueryAsync(onGetWebSuccess, onGetWebFail);
    //the remaining code is omitted for clarity  
}
function onGetWebSuccess() {
    alert("calling" + website.get_title());
    $('#getHostWebURL').text("The title of the host web of this app is " + website.get_title());
}
function onGetWebFail(sender, args) {
    alert('Failed to get lists. Error:' + args.get_message());
}
function createFields()
{
   currentcontext = new SP.ClientContext.get_current();
   web = clientContext.get_web();
   this.list = web.get_lists().getByTitle(‘ListName’);  
 //Add new fields to the list
//Single line of text Field
this.newColumn = oList.get_fields().addFieldAsXml(" ", true,
    SP.AddFieldOptions.defaultValue);
 
//Multi line of text Field
this.newColumn = oList.get_fields().addFieldAsXml(" ", true,
    SP.AddFieldOptions.defaultValue);
 
//Boolean Field
this.newColumn = oList.get_fields().addFieldAsXml(" ", true,
    SP.AddFieldOptions.defaultValue);
//Number Field
this.newColumn = oList.get_fields().addFieldAsXml(" ", true,
    SP.AddFieldOptions.defaultValue);
//DateTime Field
this.newColumn = oList.get_fields().addFieldAsXml(" ", true,
  SP.AddFieldOptions.defaultValue);
//People Picker Field
this.newColumn = oList.get_fields().addFieldAsXml(" ", true,
  SP.AddFieldOptions.defaultValue);
//Choice field(dropdown)
 this.newColumn= oList.get_fields().addFieldAsXml("ChoiceA ChoiceA ChoiceB ChoiceC ChoiceD  ", true, 
  SP.AddFieldOptions.defaultValue);
 
 currentcontext.load(this.newfield);
 currentcontext.executeQueryAsync(Function.createDelegate(this, this.onListCreateSuccess), Function.createDelegate(this, this.onQueryFailed));
}
function onListCreateSuccess(sender, args) {alert('sucess');
    alert("Field Name: " + this.newfield.get_title());
}
 
function onQueryFailed(sender, args) {
 alert('request failed ' + args.get_message() + '\n' + args.get_stackTrace());
}
Note: SP.Field.typeAsString Property is used to Gets or sets a value that specifies the type of the field.[From Msdn:http://msdn.microsoft.com/en-us/library/ee553500.aspx]